我正在尝试将我的程序从SqlConnection
更改为OleDbConnection
,但我遇到了一些障碍。
我的程序使用SqlConnection
按预期工作,但我无法使用OleDb
。
我的程序读取存储过程(XML)的结果,将其发送到Web服务,然后将结果存储在表中。
我在从存储过程中读取XML时遇到问题。
这是第一部分的代码:
public static bool BuildXml()
{
using (OleDbCommand buildXml = new OleDbCommand("usp_BUILD_RISKCALC_XML", SqlOleDbConnection))
{
buildXml.CommandType = CommandType.StoredProcedure;
try
{
OleDbDataReader reader = buildXml.ExecuteScalar();
while (reader.Read())
{
SendXml = reader.GetString(0);
}
}
catch (Exception ex)
{
WriteLog(ex.Message, 101);
return false;
}
}
}
我的文本内容为InvalidOperationException
指定的演员表无效
reader.GetString(0)
。
我100%确定存储过程正在运行,因为我使用SqlConnection
进行了测试以及在SQL Server Management Studio中运行。
答案 0 :(得分:0)
您的代码应该是;
public static bool BuildXml()
{
using (OleDbCommand buildXml = new OleDbCommand("usp_BUILD_RISKCALC_XML", SqlOleDbConnection))
{
buildXml.CommandType = CommandType.StoredProcedure;
try
{
object value = buildXml.ExecuteScalar();
SendXml = Convert.ToString(value);
}
catch (Exception ex)
{
WriteLog(ex.Message, 101);
return false;
}
}
}
代码buildXml.ExecuteScalar()
返回一个对象。因此,将其投放到OleDbDataReader
将最终显示在InvalidOperationException
。
答案 1 :(得分:0)
ExecuteScalar
返回类型为object
,您无法将其转换为OleDbDataReader
。使用ExecuteScalar
表示您确定只想从存储过程中返回一个值。您不需要OleDbDataReader
尝试以下操作:
SendXml = buildXml.ExecuteScalar().ToString;