[英]Perform a case-sensitive sql query with StrComp funtion for MS Access in c#
我是 C# 的新手。我嘗試在 C# 中為 Microsoft Access 編寫區分大小寫的 sql 查詢。這是名為“EmployeeList”的表的一部分。 注意第二條記錄的“s”是小寫的:
| ID | Name | InternalID |
|:----:|:---------:| :---------:|
| 8 | John Smith| 52455 |
| 9 | John smith| 49 |
| ... | ... | ... |
這是查詢。 我在 Access 中測試過,效果很好。
SELECT InternalID FROM EmployeeList WHERE StrComp(Name, 'John Smith', 0) = 0;
在 C# 中寫入它的正確語法是什么? 我查了很多資料,但我的代碼仍然是錯誤的:
public DataTable findInternalID(string name)
{
Connection.Open();
DataTable output = new DataTable();
OleDbCommand bdCommand = RecordConnection.CreateCommand() as OleDbCommand;
StringBuilder x = new StringBuilder();
x.AppendLine("SELECT InternalID ");
x.AppendLine("FROM EmployeeList ");
x.AppendLine($"WHERE StrComp(Name, @name, 0) = 0");
bdCommand.CommandText = x.ToString();
bdCommand.Parameters.AddWithValue("name", $"%{name}%");
_dataAdapter = new OleDbDataAdapter(bdCommand);
_dataAdapter.Fill(output);
RecordConnection.Close();
return output;
}
這是測試我的 function 的主要代碼:
string name = "John Smith";
DataTable output = _accessManager.findInternalID(name);
String message;
message = output.Rows[0][0].ToString();
MessageBox.Show(message);
這段代碼給我一個錯誤:
System.IndexOutOfRangeException:“position 0 處沒有行。”
為什么沒有記錄寫入結果?
StrComp
是 Access function,而不是 SQL Server function。
所以這將消除錯誤:
commandTextBuilder.AppendLine($"WHERE Name = @name");
但是,這不區分大小寫。
如果您使用較新的驅動程序,則可以使用StrComp
,如下所示:
如果這是 SQL 服務器,您需要將該列更改為區分大小寫。 這樣做的命令看起來像
ALTER TABLE <mytable>
ALTER COLUMN <mycolumn> VARCHAR(<mylength>)
COLLATE <myencoding>
只需填空即可。 myencoding
將是當前編碼的任何內容, CI替換為CS 。 如果您正在運行默認值,則意味着從SQL_Latin1_General_CP1_CI_AS
到SQL_Latin1_General_CP1_CS_AS
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.