我的数据库很简单,看起来像这样:
DB_Table_Name
ID int(4)
Name nvarchar(10)
Desc nvarchar(80)
创建数据库时区分大小写关闭,即数据库不区分大小写。
最近,我遇到了一个问题,因为通过 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 从 system.string 转换为 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();
这个抛出一个异常,说查询有一个指向 COLLATE 的错误!!
有人会对此有所了解吗?我是 SQL 新手
编辑:顺便说一句,当我在 SQL 查询分析器上执行上述第二个和第三个查询时,我得到了正确的值 - 区分大小写的数据。但是相同的查询在某种程度上无法通过 C# 代码工作:(
tl;博士:我有一个 SQL 查询需要区分大小写,它通过 C# 代码工作