我有一个简单的函数,只需将提供给它的参数值插入到表中的列中。
当我通过命令对象上的 ExecuteNonQuery() 方法运行该函数时,即使发生了插入,我总是得到 -1。
如果我运行与文本命令相同的查询,则会给出正确的结果 1。
我是 postgresql/npgsql 新手。是否有技巧可以让函数反馈受影响的行数? SQL Server 中的“设置 nocount off”之类的东西?
编辑: 我正在使用的代码:(使用 npgsql 2.0.11)
var connStr = @"Server=127.0.0.1;Port=5432;User Id=postgres;Password=***;Database=Test;";
using (var conn = new NpgsqlConnection(connStr)) {
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "insert_something";
cmd.CommandType = CommandType.StoredProcedure;
NpgsqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["_id"].Value = 1;
cmd.Parameters["_val"].Value = 2;
var rowsAffected = cmd.ExecuteNonQuery();
Console.WriteLine(rowsAffected);
}
}
最佳答案
我没有使用过 Npgsql,但文档中有一个示例 以下代码:
NpgsqlCommand command = new NpgsqlCommand("insert into table1 values(1, 1)", conn);
Int32 rowsaffected;
try
{
rowsaffected = command.ExecuteNonQuery();
}
如果你正在谈论像这样的一些 PostgreSQL 函数:
CREATE FUNCTION myinsert(integer) RETURNS void
LANGUAGE 'sql' AS 'INSERT INTO mytable VALUES ($1)';
并且您正在执行类似 SELECT myinsert(1);
的操作,您无法获取受影响的行数,因为您正在运行 SELECT 并且该函数内部执行的操作对您来说是不透明的.
关于postgresql - Postgres 函数(通过 npgsql)调用 ExecuteNonQuery 返回 -1 作为受影响行的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992559/