我正在將員工 ID 串列傳遞給我的 ado.net 查詢。有時我的串列是空的,所以在這種情況下我會出錯。
錯誤說: Incorrect syntax near ')'.
這是我的代碼:
var emps = String.Join(",", empList.Keys);
StringBuilder sql = new StringBuilder(
$@"select [Id]
FROM [Test].[dbo].[Employees]
Where [Id] NOT IN {emps}"
);
uj5u.com熱心網友回復:
事先檢查您的 emp 串列,如果串列不為空,則僅將 WHERE 子句添加到 StringBuilder。在你的 sql 字串中還有一個額外的 ')',
其中 [Id] 不在 {emps} 中)
您需要將其洗掉。
uj5u.com熱心網友回復:
您發布的那個 SQL 中有很多問題,但您似乎是說您將一遍又一遍地運行此 SQL,每次添加更多 ID 以排除。也許你做了一些不斷發現應該被忽略的新 ID 的事情
考慮:
using var con = new SqlConnection(...);
for(..some..ongoing..iterative..process){
empList = ..get new IDs here..
var sql = "select [Id] from [Test].[dbo].[Employees] ";
if(empList.Count > 0){
sql = $"where [Id] NOT IN ({string.Join(",", empList.Select((kvp,i) => $"@p{i}"))})";
}
using var cmd = new SqlCommand(sql, con);
//it's a no-op if 0 values
cmd.Parameters.AddRange(empList.Select((kvp,i) => new SqlParameter($"@p{i}", SqlDbType.Int) { Value = kvp.Value }));
..execute here..
}
你在哪里打開和關閉你的con寧取決于計算你的新ID需要多長時間。如果每次都是幾毫秒,那么在回圈之前打開它應該沒有問題。如果獲取新 ID 需要很長時間,請在您需要的時候打開騙局
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410253.html
標籤:
