【问题标题】:Dapper Execute function that can call PostgreSQL function and return rows affected from update or insertDapper Execute 函数,可以调用 PostgreSQL 函数并返回受更新或插入影响的行
【发布时间】:2018-06-22 18:18:03
【问题描述】:

我正在尝试创建一个执行更新的 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

【问题讨论】:

    标签: c# postgresql sql-update sql-insert dapper


    【解决方案1】:

    由于我无法找到一种方法来做我想做的事,我继续使用上面提到的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;
    

    【讨论】:

    • 使用这种方法,没有办法在 dapper 中使用 Execute 而不是 Query,是吗?顺便说一句,谢谢您的回答,看来这仍然有效。
    • @LordDraagon 我已经有一段时间没有这样做了,但我知道我从未找到其他解决方案,很遗憾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多