如何使 SqlCeCommand 案例敏感

本文关键字:案例 SqlCeCommand 何使 | 更新日期: 2023-09-27 18:32:40

我的数据库很简单,看起来像这样:

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从系统字符串转换为系统.字节[]

我也尝试了以下查询:

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;dr:我有一个SQL查询,需要区分大小写,它通过C#代码工作

如何使 SqlCeCommand 案例敏感

关系!得到答案:)

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 参数的类型。

顺便说一句,整理不起作用。好像是个虫子!