gpt4 book ai didi

c# - 如何访问 Npgsql 4.0 通用参数中的 TypedValue

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

跟进以下线程:

Npgsql 4.0 Parameters and Null Values

对于允许强类型值的新通用参数,文档指出声明看起来像这样:

cmd.Parameters.Add(new NpgsqlParameter<int>("ID", 15));

这将在参数上设置 TypedValue 属性。

但是,当我对同一命令进行多次插入时,我似乎无法直接访问 TypedValue。有没有允许这样做的结构?下面是我正在使用的示例,其中我将每个参数转换为其类型化的对应项:

using (NpgsqlTransaction trans = conn.BeginTransaction(IsolationLevel.RepeatableRead))
{
using (NpgsqlCommand cmd = new NpgsqlCommand(sql, conn, trans))
{
cmd.Parameters.Add(new NpgsqlParameter<Int32>("ID",
NpgsqlTypes.NpgsqlDbType.Integer));
cmd.Parameters.Add(new NpgsqlParameter<String>("TRAY_CODE",
NpgsqlTypes.NpgsqlDbType.Varchar));

foreach (ReturnScrapDecision newRecord in NewRecords)
{
((NpgsqlParameter<Int32>)cmd.Parameters[0]).TypedValue = newRecord.Id;
((NpgsqlParameter<String>)cmd.Parameters[1]).TypedValue = newRecord.TrayCode;

cmd.ExecuteNonQuery();
}
}

trans.Commit();
}

顺便说一句,上面的代码可以编译,但我还不知道它是否会运行。我仍在对此进行测试。

我可以很好地设置 Value:

cmd.Parameters[0].Value = newRecord.Id;

但我不能在没有转换的情况下做到这一点:

cmd.Parameters[0].TypedValue = newRecord.Id;

最佳答案

NpgsqlCommand.Parameters是一个 IList<NpgsqlParameter> - 非通用类型。所以当你做 cmd.Parameters[0]你要找回经典 NpgsqlParameter而不是 NpgsqlParameter<T> .

你可以使用向下转型:

((NpgsqlParameter<int>)cmd.Parameters[0]).TypedValue = newRecord.Id;

或者更好的是,在分配参数时只使用初始化程序:

    cmd.Parameters.Add(new NpgsqlParameter<Int32>("ID", NpgsqlTypes.NpgsqlDbType.Integer) { TypedValue = newRecord.Id });

关于c# - 如何访问 Npgsql 4.0 通用参数中的 TypedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52116341/

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