OleDbCommand没有返回结果与SqlCommand

时间:2016-01-12 11:44:55

标签: c# sql-server xml stored-procedures oledb

我正在尝试将我的程序从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中运行。

2 个答案:

答案 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;