2013-09-25 74 views
1

我的DB是簡單的,看起來像這樣:如何使SqlCeCommand案例敏感?

DB_Table_Name

ID int(4) 
Name nvarchar(10) 
Desc nvarchar(80) 

的DB是區分大小寫的關閉即DB不區分大小寫創建。

最近,我遇到到DB通過SELECT查詢得到錯誤地更新,因爲不區分大小寫查詢的問題!

這是前面的查詢:

SqlCeCommand myCmd = new SqlCeCommand("select * from DB_Table_Name where Name = @OBJName and ID = @OBJID"); 
myCmd.Connection = DBConnection; 

SqlCeParameter param = new SqlCeParameter(); 
param.ParameterName = "@OBJName "; 
param.Value = parmObj; 

SqlCeParameter param2 = new SqlCeParameter(); 
param2.ParameterName = "@OBJID"; 
param2.Value = parmID; 

myCmd.Parameters.Add(param); 
myCmd.Parameters.Add(param2); 

reader = myCmd.ExecuteReader(); 

爲了使上述查詢區分大小寫的,我已經修改了它:

SqlCeCommand myCmd = new SqlCeCommand("select * from ProgramTable where CAST(ObjName AS varbinary(10)) = CAST(@OBJName AS varbinary(10)) and ID = @OBJID"); 
myCmd.Connection = DBConnection; 

SqlCeParameter param = new SqlCeParameter(); 
param.ParameterName = "@OBJName "; 
param.Value = parmObj; 

SqlCeParameter param2 = new SqlCeParameter(); 
param2.ParameterName = "@OBJID"; 
param2.Value = parmID; 

myCmd.Parameters.Add(param); 
myCmd.Parameters.Add(param2); 

reader = myCmd.ExecuteReader(); 

每當我得到異常說需要轉換@objname from system.string to system.byte []

我也試過以下查詢:

SqlCeCommand myCmd = new SqlCeCommand("select * from ProgramTable where ObjName COLLATE SQL_Latin1_General_CP1_CS_AS = @OBJName and ID = @OBJID"); 

myCmd.Connection = DBConnection; 

SqlCeParameter param = new SqlCeParameter(); 
param.ParameterName = "@OBJName "; 
param.Value = parmObj; 

SqlCeParameter param2 = new SqlCeParameter(); 
param2.ParameterName = "@OBJID"; 
param2.Value = parmID; 

myCmd.Parameters.Add(param); 
myCmd.Parameters.Add(param2); 

reader = myCmd.ExecuteReader(); 

這一個拋出一個異常,說查詢錯誤指向整理!

會有人扔在這一些輕。我是新來的SQL

編輯:BTW,當我執行的SQL查詢分析器上述第二和第三個疑問,我得到正確的價值觀 - 大小寫敏感的數據。但是,同樣的查詢是有點不通過C#代碼:(

TL工作;博士:我有需要作出區分大小寫它通過C#代碼

+1

我覺得你周圍使用敏感/不敏感走錯了路。在「使上面的查詢大小寫不敏感」之後引入的查詢會強制字符串之間的二進制比較,從而導致對「d」和「D」進行不同處理。這是案件*敏感*。 –

+0

對不起達米安。我的意思是另一種方式 - 使查詢大小寫敏感。我相應地修改了這個問題。 – Alerter

回答

0

沒關係工作的SQL查詢得到的答案:)!

SqlCeCommand myCmd = new SqlCeCommand("select * from ProgramTable where CAST(ObjName AS varbinary(10)) = CAST(@OBJName AS varbinary(10)) and ID = @ID"); 
myCmd.Connection = DBConnection; 
myCmd.Parameters.Add("@OBJName", SqlDbType.NVarChar, 10).Value = ObjName; 
myCmd.Parameters.Add("@ID", SqlDbType.Int, 4).Value = IDValue; 

顯然,我們需要明確指定每個SQL參數的類型。

BTW,整理沒有work..seems是一個錯誤!