3

由于OleDbParameter不使用命名参数(由于其性质),为什么 .NETOleDbParameter类需要一个名称?(string parametername ...)

所有的构造函数都需要一个参数名,我永远不知道该给它起什么名字;我的名字好吗?还是我祖母的名字?

4

3 回答 3

3

尽管 OleDb/Odbc 提供程序使用位置参数而不是命名参数 -

  1. 如果您需要引用参数,则需要在 OleDbParameter 集合中以某种方式标识这些参数。

  2. 重要的是,当构造参数化的 sql 语句时,会为每个参数声明一个变量并为其分配相应的值。然后在执行的sql语句中使用。

举个例子:

string sql = "SELECT * FROM MyTable WHERE Field = ?";
OleDbCommand cmd = new OleDbCommmand(sql, sqlConnection);
cmd.Parameters.Add("@FieldValue", OleDbType.Int32, 42);
OleDbDataReader dr = cmd.ExecuteReader();

执行的 SQL 将类似于(或接近我认为):

DECLARE @FieldValue INT;
SET @FieldValue = 42;
SELECT * FROM MyTable WHERE Field = @FieldValue

建议您使用与正在操作的列的名称最匹配的参数名称。

于 2008-12-23T18:16:32.150 回答
1

就像编程中的其他所有内容一样,将其命名为对您的上下文有意义的名称!(姓名、订单号、城市等)。

在 c# 代码中,您可以使用名称按名称访问参数集合:

OleDbCommand command = new OleDbCommand();
...//Add your parameters with names, then reference them later if you need to:
command.Parameters["name"].Value = "your name or your grandmothers name here";

当您在执行语句后使用 OUT 参数提取值时,这也很有用:

OleDbParameter outParam = new OleDbParameter();
outParam.Direction = ParameterDirection.Output;
outParam.DbType = DbType.Date;
outParam.ParameterName = "outParam";
command.Parameters.Add(outParam);
command.ExecuteNonQuery();
DateTime outParam = Convert.ToDateTime(command.Parameters["outParam"].Value);
于 2008-12-23T18:15:49.547 回答
1

有接口和工厂为数据访问的底层提供者提供一定程度的独立性 - IDataParameter、DbParameter、DbProviderFactory 等。

为了支持这一点,可以命名所有参数,即使底层提供者不使用该名称。

于 2008-12-23T18:49:26.110 回答