C#SqlCommand - 将结果集设置为变量

Sag*_*gio 3 c# sql

我在C#中运行一个返回一个值(String)的SQL命令.我然后尝试将其保存到变量,但它总是抛出此异常:

System.Data.dll中出现类型'System.InvalidOperationException'的第一次机会异常线程''(0x1bbc)已退出,代码为0(0x0).System.InvalidOperationException:没有数据时读取的尝试无效.在System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)

但是,当我在SQL Server中运行相同的命令时,它肯定会输出一个值.

myCommand = new SqlCommand("SELECT TrialName FROM dbo.CT WHERE NumId='"+TrialId+"'", myConnection);    
SqlDataReader dr = myCommand.ExecuteReader();  
String TName = dr[0].ToString(); 
Run Code Online (Sandbox Code Playgroud)

即使我对整个sqlcommand进行硬编码(而不是使用TrialId变量),它仍会抛出异常.这里发生了什么?

ros*_*dia 8

在从数据读取器读取之前,您必须调用dr.Read():

myCommand = new SqlCommand("SELECT TrialName FROM dbo.CT WHERE NumId='"+TrialId+"'", 

myConnection);                
SqlDataReader dr = myCommand.ExecuteReader();                
if(dr.Read())
{
    String TName = dr[0].ToString(); 
}
Run Code Online (Sandbox Code Playgroud)

SqlDataReader.Read()使读者前进到下一条记录,并在没有更多记录时返回false.