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#代碼
我覺得你周圍使用敏感/不敏感走錯了路。在「使上面的查詢大小寫不敏感」之後引入的查詢會強制字符串之間的二進制比較,從而導致對「d」和「D」進行不同處理。這是案件*敏感*。 –
對不起達米安。我的意思是另一種方式 - 使查詢大小寫敏感。我相應地修改了這個問題。 – Alerter