【发布时间】:2009-12-01 19:36:48
【问题描述】:
我正在用 C# 编写一个用于将数据导入 SQL Server 的小框架。
我注意到,如果您尝试使用 ?参数的占位符,如果您使用 System.Data.SqlClient 命名空间,它们将不起作用。
但是,如果您使用 System.Data.OleDb 命名空间来处理数据库,它们就可以正常工作。 (您只需在连接字符串中添加 Provider=SQLOLEDB)
所以我有几个问题,因为 ?我的解决方案需要语法:
- 是否可以将命名参数与 System.Data.SqlClient 一起使用?我想使用有序参数。
- 使用一个命名空间(ado 提供程序)对性能有影响吗?
- 还有什么其他原因我应该更喜欢一个命名空间而不是另一个?
为了详细说明我要做什么,我的框架将采用一个装饰有一些自定义属性的类并生成如下 SQL:
INSERT INTO myTable (col1, col2, ...) VALUES (?, ?, ...)
此字符串将使用一个 IDbCommand 和多个 IDataParameters 创建,并且对于每个 ExecuteNonQuery,它只会设置 IDataParameters 上的值。
有什么想法吗?
编辑:我尝试使用命名参数作为 p0、p1 等作为提到的回答者,它在 SqlClient 上运行良好。但是,如果我使用 Oledb,它会出错:
"Must declare the scalar variable @p0."
我的参数是这样创建的:
new OleDbParameter("p" + index, GetType(attribute));
//GetType does work to get the correct SqlDbType
怎么了?我也尝试在参数名称中添加和删除@符号,但无济于事。
最终编辑:我刚刚让 Oledb 使用?和 SqlClient 使用命名参数。我可以为新的提供者来回更改。
【问题讨论】:
标签: c# sql-server ado.net parameters oledb