C# SqlDataReader无法识别列序号值

C# SqlDataReader无法识别列序号值,c#,wcf,silverlight,sqldatareader,C#,Wcf,Silverlight,Sqldatareader,我试图通过Silverlight应用程序的WCF服务访问SQL数据库,出于某种原因,我的SqlDataReader对象不断给我错误。我只尝试从数据库中检索一个值 这是我现在的代码: using(SqlConnection oConnection = new SqlConnection(ConnectionString)) { SqlCommand oCommand = new SqlCommand("SELECT SystemVersNo FROM dbo.CoPolicyPointer

我试图通过Silverlight应用程序的WCF服务访问SQL数据库,出于某种原因,我的
SqlDataReader
对象不断给我错误。我只尝试从数据库中检索一个值

这是我现在的代码:

using(SqlConnection oConnection = new SqlConnection(ConnectionString))
{
   SqlCommand oCommand = new SqlCommand("SELECT SystemVersNo FROM dbo.CoPolicyPointer WHERE SystemAssignId = '58859700000000'");

   CompositeType oCustomer = new CompositeType();

   SqlDataReader oReader = null;
   oConnection.Open();
   oCommand.Connection = oConnection;
   oReader = oCommand.ExecuteReader();

   if (oReader.HasRows)
   {
      oCustomer.SRVNo = oReader.GetValue(0).ToString();
   }
   else
   {
      oCustomer.SRVNo = "No rows returned.";
   }

   oConnection.Close();

   return oCustomer;
}
oReader.HasRows
返回true,但
oReader.GetValue(0)
(或oReader.GetAnythingElse)抛出错误:

System.InvalidOperationException:当不存在数据时,读取尝试无效

但真正让我感到困惑的是,如果我调用
oReader.GetOrdinal(“SystemVersNo”)
,或者
oReader.GetName(0)
,它们都会返回正确的值。为什么序号位置返回为零,但找不到在该位置读取的值?如果我在SQLServerManagementStudio中运行相同的查询,那么值就不会出现问题,因此我知道它就在那里

我对这一切都是全新的,我是否错过了一些基本的东西?还是有什么奇怪的事情发生了

谢谢

你忘了

while(oReader.Read())
{ // do stuff}
你忘了

while(oReader.Read())
{ // do stuff}

问题是,您当时还没有移动到集合中的第一条记录

if (oReader.HasRows)
{
    oCustomer.SRVNo = oReader.GetValue(0).ToString();
}
应该是

if (oReader.Read())
{
    oCustomer.SRVNo = oReader.GetValue(0).ToString();
}

若要断言至少有一条记录要读取,同时移动到该记录以从中获取数据。

问题在于您当时尚未移动到集合中的第一条记录

if (oReader.HasRows)
{
    oCustomer.SRVNo = oReader.GetValue(0).ToString();
}
应该是

if (oReader.Read())
{
    oCustomer.SRVNo = oReader.GetValue(0).ToString();
}

要断言至少有一条记录要读取,同时移动到该记录以从中获取数据。

Ahh我明白了,我没有意识到
read()
方法实际上向前移动了读卡器,而不是仅仅返回它是否可以,因为我不需要循环,所以我认为这是不必要的。谢谢啊,我明白了,我没有意识到
Read()
方法实际上推动了读者前进,而不是仅仅返回它是否可以,我认为这是不必要的,因为我不需要循环。谢谢