Kyl*_*ton 0 c# silverlight wcf sqldatareader
我正在尝试通过WCF服务访问Silverlight应用程序的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;
}
Run Code Online (Sandbox Code Playgroud)
oReader.HasRows返回true,但oReader.GetValue(0)(或oReader.GetAnythingElse,就此而言)抛出一个错误:
System.InvalidOperationException:没有数据时读取的尝试无效.
然而,真正令我困惑的是,如果我打电话oReader.GetOrdinal("SystemVersNo"),或者oReader.GetName(0),他们都返回正确的价值观.序数位置如何以零返回,但是在该位置找不到要读取的值?如果我在SQL Server Management Studio中运行相同的查询,那么值就没问题了,所以我知道它就在那里.
我对这一切都是全新的,我错过了一些基本的东西吗?或者有什么时髦的事情发生.
谢谢!
问题是您当时没有移动到集合中的第一条记录.
if (oReader.HasRows)
{
oCustomer.SRVNo = oReader.GetValue(0).ToString();
}
Run Code Online (Sandbox Code Playgroud)
应该
if (oReader.Read())
{
oCustomer.SRVNo = oReader.GetValue(0).ToString();
}
Run Code Online (Sandbox Code Playgroud)
断言至少有一条记录要读取,同时移动到该记录以从中获取数据.