gpt4 book ai didi

c# - 带参数的 OdbcCommand 不返回任何内容

转载 作者:行者123 更新时间:2023-11-29 12:14:23 25 4
gpt4 key购买 nike

我有下一个代码:

public static List<T> ExecuteQuery<T>(string qry, Dictionary<string, object> parameters = null)
{
using (var connection = new OdbcConnection(ConnectionString))
{
connection.Open();
var command = new OdbcCommand(qry, connection);
if (parameters != null)
{
foreach (var parameter in parameters)
{
command.Parameters.AddWithValue(parameter.Key, parameter.Value);
}
}
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}

当我执行类似的操作时:

ExecuteQuery<MyClass>("SELECT * FROM MYTABLE WHERE ID = 1");

它返回所有正确的数据。但是当我发送这个时:

ExecuteQuery<MyClass>(
"SELECT * FROM MYTABLE WHERE ID = @Id",
new Dictionary<string, object> { { "@Id", 1 } });

不返回任何内容。我尝试过使用 command.Parameters.Add 但历史记录相同。

那么,我的错误在哪里?

谢谢大家。

最佳答案

尝试用 ? 替换命名参数,我相信这就是 OdbcCommand用途。

ExecuteQuery<MyClass>("SELECT * FROM MYTABLE WHERE ID = ?",
new Dictionary<string, object> { { "@Id", 1 } });

此外,由于 Dictionary不保证顺序,您可能需要将其替换为 List<T>如果您有多个参数。列表保证顺序。

我还建议指定 OdbcType而不仅仅是将所有参数值添加为对象。否则它必须推断出正确的数据类型,并且可能会猜测错误。您可以创建一个更永久的类...在这里我决定只使用 Tuple<T,T,T> .

public static List<T> ExecuteQuery<T>(string qry, List<Tuple<string, OdbcType, object>> parameters = null)

...
...

foreach (var parameter in parameters)
{
command.Parameters.Add(parameter.Item1, parameter.Item2).Value = parameter.Item3;
}

关于c# - 带参数的 OdbcCommand 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082263/

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