我有一个相当不可知的ADO.NET应用程序,它连接到许多数据库,并能够提取运行所需的信息.我遇到了DB2以及它如何处理命名参数,特别是当我在同一个查询中重用一个命名参数时.我知道有几种方法可以通过简单地添加更多参数来解决这个问题,但理论上它应该像我连接到的其他数据库一样工作,因为参数名称是相同的.
我正在做的事情有点复杂,涉及子查询等,但为了演示,请采取以下查询:
从test.table中选择值,其中cola = @ key1和colb = @ key1;
命名参数@ key1使用两次.
我的代码如下:
try
{
DbProviderFactory dbfFactory = DbProviderFactories.GetFactory("IBM.Data.DB2.iSeries");
using (DbConnection dbConnection = dbfFactory.CreateConnection())
{
dbConnection.ConnectionString = "DataSource=xxx.xxx.xxx.xxx;UserID=xxxxxxxx;password=xxxxxxxxx";
using (DbCommand dbCommand = dbConnection.CreateCommand())
{
IDbDataParameter iddpParameter1 = dbCommand.CreateParameter();
iddpParameter1.ParameterName = "@key1";
iddpParameter1.DbType = DbType.String;
iddpParameter1.Value = "1";
dbCommand.Parameters.Add(iddpParameter1);
dbCommand.CommandType = CommandType.Text;
dbCommand.CommandText = "select value from test.table where cola=@key1 and colb=@key1";
dbConnection.Open();
using (IDataReader idrReader = dbCommand.ExecuteReader())
{
while (idrReader.Read())
{
...
}
}
}
} // end dbConnection …Run Code Online (Sandbox Code Playgroud)