2013-09-25 47 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是一个错误!