我有一個龐大的程序,已經有大量的查詢參數。C#SqlCommand和非命名參數
在整個項目中,我只有通過的IDbConnection,IDbCommand的訪問到數據庫等接口而不是直接使用的OleDbConnection,OleDbCommand的,等
這允許我使用不同的數據庫引擎和連接類型與我的應用程序。直到現在,例如,我使用OleDbConnection連接到MS SQL Server數據庫,OdbcConnection for MySql和SQLiteConnection從外部庫,顯然,SQLite。
現在我想嘗試用SqlConnection替換OleDbConnection來連接到SQL Server,但是我發現參數化查詢存在一些問題。
我是用來做這樣的事情與參數化查詢:
IDbCommand cmd = connection.CreateCommand();
cmd.CommandText = "UPDATE foo SET field1=? WHERE ID=?";
DbUtils.AddParameter(cmd, DbType.StringFixedLength, "hello");
DbUtils.AddParameter(cmd, DbType.Int32, 1);
cmd.ExecuteNonQuery();
的AddParameter靜態方法檢查IDbCommand的類型和參數值添加到它。
這適用於上面指定的三種連接類型,但不適用於SqlConnection,它會引發錯誤:'?'附近的語法錯誤。
的SqlCommand似乎需要命名參數的工作:
IDbCommand cmd = connection.CreateCommand();
cmd.CommandText = "UPDATE foo SET [email protected] WHERE [email protected]";
DbUtils.AddParameter(cmd, DbType.StringFixedLength, "@pfield1", "hello");
DbUtils.AddParameter(cmd, DbType.Int32, "@pID", 1);
cmd.ExecuteNonQuery();
你知道,如果它是不可能性,以避免使用命名參數,以保持與其他連接類型的兼容性?
謝謝!
Francesco
您是否嘗試過只用'@',而不是'?'? – krillgar
@krillgar:我只是試過,但它給了我錯誤:**必須聲明可擴展的變量'@'** – Formentz
這就是我想它會做的,但值得一試。 – krillgar