簡體   English   中英

Dapper Execute函數,可以調用PostgreSQL函數並返回受更新或插入影響的行

[英]Dapper Execute function that can call PostgreSQL function and return rows affected from update or insert

我試圖創建一個做更新的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的內容? 換句話說,可以訪問以下信息:“查詢成功返回:受影響的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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM