C# SqlDataReader执行错误

C# SqlDataReader执行错误,c#,.net,sql,sql-server,C#,.net,Sql,Sql Server,我正在尝试使用C MSVS 2008从名为Specializationtbl的表中检索SpecializationID,该表在其他一些行旁边包含SpecializationName和SpecializationID,我的问题与一些错误有关,没有要显示的数据,命令如下: SqlCommand READSpecID = new SqlCommand("SELECT * FROM Specializationtbl WHERE SpecializationName='" + comboBox1.Tex

我正在尝试使用C MSVS 2008从名为Specializationtbl的表中检索SpecializationID,该表在其他一些行旁边包含SpecializationName和SpecializationID,我的问题与一些错误有关,没有要显示的数据,命令如下:

SqlCommand READSpecID = new SqlCommand("SELECT * FROM Specializationtbl WHERE SpecializationName='" + comboBox1.Text + "'" , DBcnction);
DBcnction.Open();

SqlDataReader ReadSpecID_ = READSpecID.ExecuteReader();
ReadSpecID_.Read();
int SpecID_ = Convert.ToInt16(ReadSpecID_["SpecID"].ToString());

DBcnction.Close();

我还尝试选择SpecID而不是所有行,但似乎无法正确地密封查询并始终不接收任何数据显示错误,知道我在哪里出错吗?

1在将值分配给READSPecID之前,请尝试打开DBcnction

DBcnction.Open();
SqlCommand READSpecID = new SqlCommand("SELECT * FROM Specializationtbl WHERE     SpecializationName='" + comboBox1.Text + "'" , DBcnction);
2在SSMS中运行命令:

 SELECT * FROM Specializationtbl WHERE SpecializationName ='yourvalue'
并查看是否返回任何结果

3选中comboBox1。文本中有一个值


4验证comboBox1的内容。文本或使用参数化查询或存储过程以确保您不会成为SQL注入的受害者:

重构以解决两个问题:

构建SQL语句时,SQL注入出现问题。 如果只需要一个值,请使用ExecuteScalar。 使用块实现。 如果您确实需要语句中的多个值:

 using (var conn = new SqlConnection(SomeConnectionString))
 using (var cmd = conn.CreateCommand())
 {
   cmd.CommandText = "SELECT SpecID, Value2 FROM Specializationtbl WHERE SpecializationName= @Name";
   cmd.Parameters.AddWithValue("@Name", comboBox1.Text);
   conn.Open();
   var dr = cmd.ExecuteReader();
   while (dr.Read())
   {
      Customer c = new Customer { 
             ID = dr["SpecID"].ToString(),
             Value = dr["Value2"].ToString(),
       };
   }
}

需要首先测试是否有任何行。我怀疑查询返回了零行

如果ReadSpecID\uu0.HasRows { ReadSpecID_u2;u2.Read; }

 using (var conn = new SqlConnection(SomeConnectionString))
 using (var cmd = conn.CreateCommand())
 {
   cmd.CommandText = "SELECT SpecID, Value2 FROM Specializationtbl WHERE SpecializationName= @Name";
   cmd.Parameters.AddWithValue("@Name", comboBox1.Text);
   conn.Open();
   var dr = cmd.ExecuteReader();
   while (dr.Read())
   {
      Customer c = new Customer { 
             ID = dr["SpecID"].ToString(),
             Value = dr["Value2"].ToString(),
       };
   }
}