gpt4 book ai didi

c# - 分组查询时无法使用 ExecuteReader() 检索数据

转载 作者:行者123 更新时间:2023-11-30 14:51:14 24 4
gpt4 key购买 nike

我需要检索存储在包含数千项的数据库中的信息。如果我通过这种方式逐一进行,则需要花费大量时间(tac 是一个 8 个字符的字符串):

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DataBase\IMEIDB.accdb";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
using (OleDbCommand command = connection.CreateCommand())
{
OleDbDataReader reader;
command.CommandText = "SELECT TAC, Name, Model, Year, Manufacturer, LTE FROM Terminales WHERE TAC = @tac";
command.Parameters.AddWithValue("@tac", tac);
reader = command.ExecuteReader();
while (reader.Read())
{
ulong tac = Convert.ToUInt64(reader.GetString(0));
if (this.DiccionarioTerminales.ContainsKey(tac))
{
DiccionarioTerminales[tac].inDB = true;
DiccionarioTerminales[tac].Name = reader.GetValue(1).ToString();
DiccionarioTerminales[tac].Manufacturer = reader.GetValue(2).ToString();
DiccionarioTerminales[tac].Model = reader.GetValue(3).ToString();
DiccionarioTerminales[tac].Year = reader.GetValue(4).ToString();
DiccionarioTerminales[tac].LTE = reader.GetValue(5).ToString();
}
}
command.Dispose();
}
connection.Dispose();
}

效果很好(我知道如果它只有一条记录我必须使用 ExecuteNonQuery(),但这个例子只是一个测试),但是如果我尝试将 tac 10 按 10 分组(现在tac 是一个类似 'xxxxxxxx','xxxxxxxx','xxxxxxxx','xxxxxxxx'... 的字符串,在我的代码中进行下一个更改...

OleDbDataReader reader;
command.CommandText = "SELECT TAC, Name, Model, Year, Manufacturer, LTE FROM Terminales WHERE TAC IN (@tac)";
command.Parameters.AddWithValue("@tac", tac);

它没有进入 while 循环,我不知道为什么...

我是否遗漏了什么或者我可能需要使用其他方法来检索这些数据?

编辑:由于 Soner Gönül 更改格式回答

最佳答案

因为当你在 IN 子句中使用这个字符串时,它看起来像;

IN (xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx)

但是正确的语法应该是

IN ('xxxxxxxx','xxxxxxxx','xxxxxxxx','xxxxxxxx')

这就是它不起作用的原因。一种解决方案可能是,您可以使用 , 拆分您的字符串,使用单引号将它们格式化,然后再次加入它们 ,

var str = "xxxxxxxx,xxxxxxxx,xxxxxxxx,xxxxxxxx";
var result = string.Join(",", str.Split(',').Select(s => string.Format("'{0}'", s)));

result 将是 'xxxxxxxx','xxxxxxxx','xxxxxxxx','xxxxxxxx' 并且您可以在您的 IN 中使用它像这样的子句;

...TAC IN (@tac)

command.Parameters.AddWithValue("@tac", result);

也尽量不要使用AddWithValueIt may generate unexpected and surprising results sometimes .使用 Add 方法重载来指定您的参数类型及其大小。

相关:Parameterize an SQL IN clause

关于c# - 分组查询时无法使用 ExecuteReader() 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com