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

标签 c# postgresql npgsql

跟进以下线程:

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/

相关文章:

c# - MySQL C#错误; "connection must be valid and open"

postgresql - Postgres : Composite Unique Index with a value

c# - 无法首先使用 Npgsql + EF6 代码从 PostgreSQL View 生成 C# 类

c# - 使用 wpf 在 linux 上编译 c#

c# - linq 中使用 ObjectSet<> 而不是使用 .AddToXXXXX(MyEntity) 插入记录的语法是什么,因为这已被弃用?

json - 将格式化的 json 加载到 postgreSQL 表

SQL 可搜索缓存 - 高可扩展性

c# - 当参数不为空 Npgsql 时,在 linq 查询中包含 where 子句

c# - Npgsql 3.0.0 在 Dapper 1.42 中使用具有自定义类型处理程序的参数的查询阻塞

c# - 如何连接异步枚举?