Npgsql 4.0 参数和空值

使用 Npgsql 传递空值如下所示:


using (NpgsqlCommand cmd = new NpgsqlCommand("insert into foo values (:TEST)", conn))

{

    cmd.Parameters.Add(new NpgsqlParameter("TEST", NpgsqlDbType.Varchar));

    cmd.Parameters[0].Value = DBNull.Value;


    cmd.ExecuteNonQuery();

}

哪个工作正常。


新的 Npgsql 4.0 文档建议使用强数据类型声明参数,如下所示:


using (NpgsqlCommand cmd = new NpgsqlCommand("insert into foo values (:TEST)", conn))

{

    cmd.Parameters.Add(new NpgsqlParameter<string>("TEST", NpgsqlDbType.Varchar));

    cmd.Parameters[0].Value = DBNull.Value;


    cmd.ExecuteNonQuery();

}

当传递 DBNull.Value 时,会抛出一般异常:


无法将“System.DBNull”类型的对象转换为“System.String”类型。


一切仍然适用于新的无装箱参数,但新语法似乎有意义,我们想使用它……但是如何解决这种数据类型断开连接的问题?


上面的例子是一个字符串。我认为这也会影响数字和日期。


慕运维8079593
浏览 251回答 2
2回答

牛魔王的故事

我遇到了这个问题,现在我没有得到例外这里我如何为 Postgres 函数声明参数:string test;using (NpgsqlCommand cmd = new NpgsqlCommand("insert into foo values (:TEST)", conn)){&nbsp; &nbsp; cmd.Parameters.AddWithValue("TEST", NpgsqlTypes.NpgsqlDbType.Varchar, (object)test?? DBNull.Value);&nbsp; &nbsp; cmd.ExecuteNonQuery();}
打开App,查看更多内容
随时随地看视频慕课网APP