如何将数据库表中的数据存储在多个变量中?

时间:2015-02-27 15:15:25

标签: c# sql select

那个正确的语法是什么?我的试用版:

public void CalculateFRDBToks(TestBLL testToks)
{
    try
    {
        con.Open();
        cmd = new SqlCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = ("Select @Freq12, @Freq20, @Freq9, @Freq11 FROM TOKS_Test");
        cmd.Parameters.AddWithValue("@Freq12", testToks.freq12);//<--variable
        cmd.Parameters.AddWithValue("@Freq20", testToks.freq20);<--variable
        cmd.Parameters.AddWithValue("@Freq9", testToks.freq11);<--variable
        cmd.Parameters.AddWithValue("@Freq11", testToks.freq9);<--variable
        SqlDataReader dr = cmd.ExecuteReader();
        cmd.ExecuteNonQuery();
        con.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

不将对象引用设置为对象的实例。

1 个答案:

答案 0 :(得分:0)

虽然它是NRE,但问题是SQL和参数的使用错误。


当您必须将某些内容传递给查询时,将使用参数,例如,如果要根据代码中的值搜索特定列,则传递参数并在WHERE子句中使用它。

在您的代码中,您似乎只是在没有任何条件的情况下从表中选择某些列。 您必须指定列名

像:

cmd.CommandText = ("Select ID, Name, Col3, Col4 FROM TOKS_Test");

您的代码中很少有其他内容:

  • 您尚未使用命令对象附加连接对象
  • 将您的SqlConnectionSqlCommand对象封装在using声明中
  • 使用ExecuteReader,因为您将获得/期望查询中的多个值。

类似的东西:

public void CalculateFRDBToks(TestBLL testToks)
{
    try
    {
        using (SqlConnection con = new SqlConnection("Connection String"))
        using (SqlCommand cmd = new SqlCommand("SELECT col1, col2, col3 FROM TOKS_TEST", con))
        {
            con.Open();
            cmd.CommandType = CommandType.Text;
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                Console.WriteLine("Col1 {0}, Col2 {1}, Col3 {2}", dr["Col1"], dr["Col2"], dr["Col3"]);
                //or populate a List of your object based on values
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

请参阅SqlParameterWhy do we always prefer using parameters in SQL statements?

的此问题