C# SQL选择查询未选择

C# SQL选择查询未选择,c#,sql,syntax,type-conversion,C#,Sql,Syntax,Type Conversion,我正在尝试使用System.data.SqlClient;使用C查询SQL表中的数据;。我可以毫无问题地从表中选择*。我怀疑我的问题可能是由于数据类型,可能是无意中错误地转换了一些变量。我得到的错误是:当没有数据存在时,读取数据的尝试无效 进一步详情: 在我的SQL表中,Column1和Column3的类型为int。Column2和Column4的类型为char1。第5列的类型为小数5,4 请您帮助识别以下代码中的问题,好吗 public void Score(List<Tuple<

我正在尝试使用System.data.SqlClient;使用C查询SQL表中的数据;。我可以毫无问题地从表中选择*。我怀疑我的问题可能是由于数据类型,可能是无意中错误地转换了一些变量。我得到的错误是:当没有数据存在时,读取数据的尝试无效

进一步详情:

在我的SQL表中,Column1和Column3的类型为int。Column2和Column4的类型为char1。第5列的类型为小数5,4

请您帮助识别以下代码中的问题,好吗

public void Score(List<Tuple<int, char>> myList)
    {
        int myColumn1 = myList[0].Item1;
        char myColumn2 = myList[0].Item2;
        int myColumn3 = myList[1].Item1;
        char myColumn4 = myList[1].Item2;

        myConnection.Open();

        SqlCommand myCommand = new SqlCommand("SELECT * FROM table" +
        " WHERE Column1 = " + myColumn1 + 
        " AND Column2 = '" + myColumn2 +
        "' AND Column3 = " + myColumn3 +
        " AND Column4 = '" + myColumn4 + "'", myConnection);

        SqlDataReader myReader = null;
        myReader = myCommand.ExecuteReader();

        Console.Out.WriteLine(myReader[5].ToString());         
    }

谢谢大家!

从数据库检索数据后,您必须:

您可以在上看到一个示例

还有几点需要注意:

如果MyReLead(5)可能为NULL,则考虑使用Realth.ToStutyMyRead(5)。这将返回一个空字符串,而不是引发异常

如果您使用的是.NET4.5,那么您可以尝试以下方法:myReader.GetFieldValue5


使用参数化查询避免sql注入

myCommand = new SqlCommand("SELECT * FROM table
        WHERE Column1=@column1
         AND Column2 =@myColumn2 
         AND Column3 = @myColumn3 
         AND Column4 =@myColumn4", myConnection);

  myCommand.Parameters.AddWithValue("@column1", value1);
  myCommand.Parameters.AddWithValue("@myColumn2", value2);
  myCommand.Parameters.AddWithValue("@myColumn3", value3);
  myCommand.Parameters.AddWithValue("@myColumn3", value4);

  using(SqlDataReader reader = myCommand.ExecuteReader())
  {
    while(reader.Read())
    {
      //code here
    }
  }

您已经初始化了mycommand两次,因此您需要研究如何为sql使用参数。您正在进行SQL注入攻击。重复、、和其他。您的字符列是否填充了空格,从而阻止了匹配?此外,您可以将该行压缩为var myReader=myCommand.ExecuteReader;。
myCommand = new SqlCommand("SELECT * FROM table
        WHERE Column1=@column1
         AND Column2 =@myColumn2 
         AND Column3 = @myColumn3 
         AND Column4 =@myColumn4", myConnection);

  myCommand.Parameters.AddWithValue("@column1", value1);
  myCommand.Parameters.AddWithValue("@myColumn2", value2);
  myCommand.Parameters.AddWithValue("@myColumn3", value3);
  myCommand.Parameters.AddWithValue("@myColumn3", value4);

  using(SqlDataReader reader = myCommand.ExecuteReader())
  {
    while(reader.Read())
    {
      //code here
    }
  }