OleDbCommand与SqlCommand相比未返回结果
本文关键字:返回 结果 SqlCommand OleDbCommand | 更新日期: 2023-09-27 18:29:54
我正试图将程序从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
进行了测试,并在SQLServerManagementStudio中运行。
您的代码应该是;
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
中结束。
ExecuteScalar
返回类型为object
,无法将其转换为OleDbDataReader
。使用ExecuteScalar
意味着您确信只想从存储过程中返回一个值。您不需要OleDbDataReader
,只需尝试以下操作:
SendXml = buildXml.ExecuteScalar().ToString;