[英]IN Operator in OLEDB
我正在使用OLEDB連接從Excel文件讀取數據。 在Select查詢中使用IN運算符時遇到問題。 以下是我的查詢,
string EmployeeIds = "'1231','1232','1233'";
SELECT [Employee Number],[Employee Name],[First In Time],[Last Out Time],[Total Work Hours]
FROM [Sheet0$A2:J]
WHERE [Employee Number] IN (?);
comm.Parameters.AddWithValue("?",EmployeeIds);
我得到的結果是空的,但是如果我只給出單個值,那么我就得到結果。 請幫忙。
where someval in ('123,456,789')
與以下內容有很大不同 :
where someval in (123,456,789)
第二行針對3個數值測試someval
; 第一行針對碰巧包含數字和逗號的單個字符串值測試someval
(但這些數字和逗號無關)。
沒有以下一項,您將無法做自己想做的事情:
in (?,?,?,?)
STRING_SPLIT
(這將非常特定於后端); 我對Excel的了解不足,無法建議這樣的功能是否存在 這是一個非常常見的錯誤。
IN
運算符需要一個值列表 ,但是您提供的一個值恰好包含一個列表。 您應該為EmployeeIds列表中的每個值創建一個不同的參數。
這是一種實現方法:
string EmployeeIds = "'1231','1232','1233'";
var values = EmployeeIds.Split(',');
using(var command = new OleDbCommand())
{
var sql = "SELECT [Employee Number], [Employee Name], [First In Time], [Last Out Time], [Total Work Hours] "+
"FROM [Sheet0$A2:J] "+
"WHERE [Employee Number] IN (";
for(int i=0; i < values.Length; i++)
{
// Please note that string interpolation will work only with c# 6 or later.
// If you are working with vs 2013 or earlier, use string.Format instead.
sql = $"{sql} @{i},";
command.Parameters.Add($"@{i}", OleDbType.Int).Value = values[i].Trim(new char[] {'}); // You don't need the ' anymore since you are working with parameters now...
}
command.CommandText = sql.TrimEnd(',') +");";
command.Connection = con;
using(var reader = Command.ExecuteReader())
{
while(reader.Read())
{
// do your stuff with the data
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.