小巧玲瓏:我可以使用參數嗎?

dapper npgsql parameter-passing

我正在編寫一些代碼,為我的應用程序準備數據庫。在代碼中,當我創建表時,有一些重複的SQL語句,我想在某些方法中隱藏它們(現在只有兩個:創建主鍵並使表的id自動增加一個Postgres的)。對於主鍵的簡單情況,我首先編寫了一個這樣的函數:

public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
    conn.Execute(@"
ALTER TABLE ""@tblName""
    ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
    ", new { tblName = tblName,
             constrName = tblName + "_pkey",
             colName = colName } );
}

經過多次擺弄錯誤和異常後,我終於得出結論,以這種方式使用參數並不是真的支持,所以我切換到傳統的string.Format()調用,一切都很順利。

但我並不是很滿意。這種使用參數的方式真的不受支持嗎?如果是這樣,我可以安全地使用這些參數的地方是什麼?僅適用於SQL查詢的可變部分 - 例如我可以使用存儲過程參數的地方?

一般承認的答案

如果我沒記錯的話,Dapper使用參數化的IDbCommand來執行其查詢。

參數化查詢只是字符串替換操作。

更具體地說,參數化查詢允許您在查詢中包含參數,發送這些參數的值,然後SQL Server處理編譯查詢並傳遞參數的值。

如果您無法使用所需語法使用普通ADO.NET創建參數化查詢,則Dapper.NET也無法為您執行此操作。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因