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