C#-无法隐式转换类型';IBM.Data.DB2.iSeries.iDB2DataReader';至';System.Data.SqlClient.SqlDataReader';
我在一个Ranorex项目中工作,但这不是Ranorex特有的问题。我需要打开到AS400 DB2数据库的连接,然后对其运行SQL查询 我有成功打开连接并返回SQL查询结果的代码C#-无法隐式转换类型';IBM.Data.DB2.iSeries.iDB2DataReader';至';System.Data.SqlClient.SqlDataReader';,c#,sql,db2,ibm-midrange,ranorex,C#,Sql,Db2,Ibm Midrange,Ranorex,我在一个Ranorex项目中工作,但这不是Ranorex特有的问题。我需要打开到AS400 DB2数据库的连接,然后对其运行SQL查询 我有成功打开连接并返回SQL查询结果的代码 iDB2Connection cn = new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System"); cn.Open(); iDB2Command
iDB2Connection cn = new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
cn.Open();
iDB2Command cmd = new iDB2Command("select count(*) from ABC_table where xxxx = 'WC' AND xxxx = 'L302328'", cn);
int count = Convert.ToInt32(cmd.ExecuteScalar());
Report.Log(ReportLevel.Info, "count", count.ToString());
cn.Close();
在代码中,第二个方法调用第一个方法打开连接,然后允许第二个方法运行SQL命令,但我得到以下错误:
无法隐式转换类型“IBM.Data.DB2.iSeries.iDB2DataReader”
到“System.Data.SqlClient.SqlDataReader”
在第一个方法的“returnnewidb2connection(cn.ToString())”点
public static class sQlHelper
{
private static SqlConnection sQlConnect()
{
iDB2Connection cn = new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
return new iDB2Connection(cn.ToString());
}
public static void validateResult()
{
var myConnection = sQlConnect();
myConnection.Open();
string sqlStatementForCheckHeaders = "select count(*) from ABC_table where xxxx = 'WC' AND xxxx = 'L302328'";
int count = Convert.ToInt32(cmd.ExecuteScalar());
SqlDataReader myReader = null;
iDB2Command myCommand = new iDB2Command(sqlStatementForCheckHeaders, myConnection);
myReader = myCommand.ExecuteReader();
while(myReader.Read())
{
Console.WriteLine(myReader["Column1"].ToString());
Console.WriteLine(myReader["Column2"].ToString());
}
myConnection.Close();
}
}
我无法确定如何解决该问题,也无法找到有关错误本身的任何信息。如果您能提供任何支持/建议,我将不胜感激。您的代码中有两个缺陷。我认为您将
System.Data.SqlClient
名称空间与IBM.Data.DB2.iSeries
混淆了
首先,您的sQlConnect
方法被声明为返回SqlConnection
,但返回的是iDB2Connection
。修正签名:
private static iDB2Connection sQlConnect() // returns a IDB2Connection!
{
return new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
}
第二条错误消息是由myReader
的错误声明引起的。由于myCommand
是一个iDB2Command
(而不是SqlCommand
),它的ExecuteReader()
方法返回一个IBM.Data.DB2.iSeries.iDB2DataReader
,而不是SqlDataReader
因此,您只需更改myReader
的声明:
iDB2Command myCommand = new iDB2Command(sqlStatementForCheckHeaders, myConnection);
// use the correct type (or var)
iDB2DataReader myReader = myCommand.ExecuteReader();
while(myReader.Read()) { ... }
你的代码有两个缺陷。我认为您将
System.Data.SqlClient
名称空间与IBM.Data.DB2.iSeries
混淆了
首先,您的sQlConnect
方法被声明为返回SqlConnection
,但返回的是iDB2Connection
。修正签名:
private static iDB2Connection sQlConnect() // returns a IDB2Connection!
{
return new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
}
第二条错误消息是由myReader
的错误声明引起的。由于myCommand
是一个iDB2Command
(而不是SqlCommand
),它的ExecuteReader()
方法返回一个IBM.Data.DB2.iSeries.iDB2DataReader
,而不是SqlDataReader
因此,您只需更改myReader
的声明:
iDB2Command myCommand = new iDB2Command(sqlStatementForCheckHeaders, myConnection);
// use the correct type (or var)
iDB2DataReader myReader = myCommand.ExecuteReader();
while(myReader.Read()) { ... }
首先,更新方法定义以返回
iDB2Connection
而不是SQLConnection
private static iDB2Connection sQlConnect()
{
return new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
}
其次
cmd.ExecuteScalar()无法将代码>强制转换为IDB2数据读取器
-您试图返回单个值,而不是数据读取器,因此请使用类似
int hasRecords = (int)cmd.ExecuteScalar();
首先,更新方法定义以返回iDB2Connection
而不是SQLConnection
private static iDB2Connection sQlConnect()
{
return new iDB2Connection("Data Source=as400_DB;User ID=CLIENT;Password=CLIENT;Default Collection=XXXXXX;Naming=System");
}
其次
cmd.ExecuteScalar()无法将代码>强制转换为IDB2数据读取器
-您试图返回单个值,而不是数据读取器,因此请使用类似
int hasRecords = (int)cmd.ExecuteScalar();
我似乎无法将这两个回复都标记为正确答案,但勒内·沃格特和埃桑·乌拉·纳齐尔的帖子都为我的问题提供了答案。感谢你们两位。我似乎无法将两个回复都标记为正确答案,但勒内·沃格特和埃桑·乌拉·纳齐尔的帖子都为我的问题提供了答案。谢谢你们两位。您的方法sQlConnect有点多余。您的方法sQlConnect有点多余。谢谢您的帮助。我现在已经打开了连接器,但是需要处理第二种方法中的SQL。谢谢你的帮助。我现在已经打开了连接器,但是需要处理第二种方法中的SQL。谢谢你的帮助。我现在已经打开了连接器,但是需要处理第二种方法中的SQL。谢谢你的帮助。我现在已经设法打开了连接器,但需要处理第二种方法中的SQL。