我有一个庞大的程序,它已经有了大量的参数查询。
在整个项目中,我只通过IDbConnection、IDbCommand等接口访问数据库,而不是直接使用OleDbConnection、OleDbCommand等。
这允许我在应用程序中使用不同的数据库引擎和连接类型。例如,到目前为止,我使用OleDbConnection连接到MySql数据库、用于MySql的OdbcConnection和从外部库(显然用于SQLite )的SQLiteConnection。
现在,我想尝试将OleDbConnection替换为SqlConnection,以连接到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 field1=@pfield1 WHERE ID=@pID";
DbUtils.AddParameter(cmd, DbType.StringFixedLength, "@pfield1", "hello");
DbUtils.AddParameter(cmd, DbType.Int32, "@pID", 1);
cmd.ExecuteNonQuery();您知道是否有可能避免使用命名参数来保持与其他连接类型的兼容性?
谢谢!
弗朗西斯科
发布于 2015-04-17 13:47:38
https://stackoverflow.com/questions/29701022
复制相似问题