首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# SqlCommand和未命名参数

C# SqlCommand和未命名参数
EN

Stack Overflow用户
提问于 2015-04-17 13:44:58
回答 1查看 1.5K关注 0票数 0

我有一个庞大的程序,它已经有了大量的参数查询。

在整个项目中,我只通过IDbConnection、IDbCommand等接口访问数据库,而不是直接使用OleDbConnection、OleDbCommand等。

这允许我在应用程序中使用不同的数据库引擎和连接类型。例如,到目前为止,我使用OleDbConnection连接到MySql数据库、用于MySql的OdbcConnection和从外部库(显然用于SQLite )的SQLiteConnection。

现在,我想尝试将OleDbConnection替换为SqlConnection,以连接到Server,但我发现参数化查询存在一些问题。

我习惯于用参数化的查询来做类似的事情:

代码语言:javascript
运行
复制
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似乎需要指定的参数才能工作:

代码语言:javascript
运行
复制
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();

您知道是否有可能避免使用命名参数来保持与其他连接类型的兼容性?

谢谢!

弗朗西斯科

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 13:47:38

我不这样认为。

来自 property

.NET框架数据提供程序不支持问号(?)用于将参数传递给由CommandType.Text命令调用的SQL语句或存储过程的占位符。在这种情况下,必须使用命名参数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29701022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档