My DB is simple and looks like this:
DB_Table_Name
ID int(4)
Name nvarchar(10)
Desc nvarchar(80)
The db is created with case-sensitive turned OFF i.e., DB is case insensitive.
Recently, I encountered an issue where the db was getting wrongly updated because of case insensitive querying through SELECT query!
This was the previous query:
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();
In order to make the above query case sensitive, I have modified it as:
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();
Whenever I get exception saying need to convert @OBJName from system.string to system.byte[]
I have tried the following query too:
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();
This one throws an exception saying query has an error pointing to COLLATE!!
Would anybody throw some light on this. I'm new to SQL
Edit: BTW, when I execute the above mentioned 2nd and 3rd queries on SQL Query Analyzer I get correct values - case sensitive data. But the same query is somehow not working via C# code :(
tl;dr: I have an SQL query which needs to be made case sensitive which works through C# code