【问题标题】:SQL Select Query Not Selecting [duplicate]SQL选择查询未选择[重复]
【发布时间】:2014-05-14 03:57:28
【问题描述】:

我正在尝试使用 C#using System.Data.SqlClient; 从 SQL 表中查询数据。我可以SELECT * FROM table 没有问题。我怀疑我的问题可能是由于数据类型,并且可能无意中错误地转换了某些变量。我得到的错误是:不存在数据时读取数据的尝试无效。

更多细节:

在我的 SQL 表中,Column1 和 Column3 的类型是 int。 Column2 和 Column4 的类型为 char(1)。 Column5 的类型是小数(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());         
    }

谢谢!

【问题讨论】:

标签: c# sql syntax type-conversion


【解决方案1】:

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

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

您可以在MSDN 上查看示例。

其他几点说明:

  • 如果myReader[5] 可能是null,则考虑使用Convert.ToString(myReader[5])。这将返回一个空字符串,而不是引发异常。

  • 如果您使用的是 .NET 4.5,则可以尝试使用 alternate syntaxmyReader.GetFieldValue&lt;string&gt;(5)

【讨论】:

  • 另外,您可以将该行压缩为var myReader = myCommand.ExecuteReader();
【解决方案2】:

使用参数化查询避免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
    }
  }

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2020-02-03
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多