OleDbParameter的名字痴迷
由于OleDbParameter
不使用命名参数(由于其性质),为什么.NET OleDbParameter
类需要一个名称? (string parametername ...)
所有构造函数都需要一个参数名称,我永远不确定要给它的名称; 我的名字好吗? 还是我的祖母的名字?
虽然OleDb / Odbc提供程序使用位置参数而不是命名参数 –
-
如果需要引用它们,则需要在OleDbParameter集合中以某种方式识别参数。
-
重要的是,当构造参数化的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
建议您使用与正在操作的列的名称最匹配的参数名称。
就像编程中的其他内容一样,将其命名为对您的上下文有意义的内容 (名称,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);
有接口和工厂为数据访问提供底层提供程序的一定程度的独立性 – IDataParameter,DbParameter,DbProviderFactory等。
为了支持这一点,即使底层提供程序未使用该名称,也可以命名所有参数。