[英]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.