gpt4 book ai didi

c# - Dapper Execute 函数可以调用 PostgreSQL 函数并返回受更新或插入影响的行

转载 作者:行者123 更新时间:2023-11-29 13:44:13 45 4
gpt4 key购买 nike

我正在尝试创建一个执行更新的 postgresql 函数。我想让行受到影响。我知道这可以通过使用 GET DIAGNOSTICS rows_affected = ROW_COUNT 来完成。但我正在尝试使用 Dapper Execute 函数,它可以返回自己受影响的行。据我所能确定的,只有当你有一个硬编码的查询你正在调用时,这才有效,例如在 C# 中

IDbConnection dbConnection = new NpgsqlConnection(strConnection)
string command = "UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%';"
int rowsAffected = dbConnection.Execute(command);

我想创建一个做同样事情的函数,并让 Dapper 使用 Execute 调用它,而不是使用 Query。这是我目前所拥有的:

CREATE FUNCTION "Xtream"."fnUpdateUserID" () RETURNS VOID
AS $$
BEGIN
UPDATE myschema.mytable
SET email = ''
WHERE email NOT LIKE '%@%';
END;
$$ LANGUAGE 'plpgsql';

所以我的问题是,有没有办法在不向该函数添加类似 int return 的情况下使行受到影响?换句话说,可以访问以下信息:“查询成功返回:受影响的 2 行,执行时间 11 毫秒。”直接在 postgresql 查询窗口中调用 UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%' 时返回。我知道 RETURNS VOID 对我的尝试不起作用。

换句话说,有没有办法在 PostgreSQL 插入或更新函数上使用 Dapper Execute

最佳答案

由于我一直无法找到一种方法来完成我想做的事情,所以我继续使用上面提到的 GET DIAGNOSTICS 解决方案。我将其发布为后代的答案。如果存在其他解决方案,我仍然欢迎。

修改函数如下:

CREATE FUNCTION "Xtream"."fnUpdateUserID" () RETURNS integer
AS $$
DECLARE rows_affected integer;
BEGIN
UPDATE myschema.mytable
SET email = ''
WHERE email NOT LIKE '%@%';
GET DIAGNOSTICS rows_affected = ROW_COUNT;
RETURN rows_affected;
END;
$$ LANGUAGE 'plpgsql';

然后像这样更改 Dapper 调用:

IDbConnection dbConnection = new NpgsqlConnection(strConnection)
string command = "UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%';"
int rowsAffected = dbConnection.Query<int>(command).FirstOrDefault;

关于c# - Dapper Execute 函数可以调用 PostgreSQL 函数并返回受更新或插入影响的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50993620/

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