C# SqlDataReader无法识别列序号值
我试图通过Silverlight应用程序的WCF服务访问SQL数据库,出于某种原因,我的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
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()
方法实际上推动了读者前进,而不是仅仅返回它是否可以,我认为这是不必要的,因为我不需要循环。谢谢