OleDbParameter的名字痴迷

时间:2008-12-23 17:55:10

标签: c# .net oledbparameter

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

所有构造函数都需要一个参数名称,我永远不确定要给它的名称;我的名字好吗?还是我祖母的名字?

3 个答案:

答案 0 :(得分:3)

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

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

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

  3. 以例如:

    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
    

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

答案 1 :(得分:1)

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

在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);

答案 2 :(得分:1)

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

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