那个正确的语法是什么?我的试用版:
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;
}
}
不将对象引用设置为对象的实例。
答案 0 :(得分:0)
虽然它是NRE,但问题是SQL和参数的使用错误。
当您必须将某些内容传递给查询时,将使用参数,例如,如果要根据代码中的值搜索特定列,则传递参数并在WHERE
子句中使用它。
在您的代码中,您似乎只是在没有任何条件的情况下从表中选择某些列。 您必须指定列名。
像:
cmd.CommandText = ("Select ID, Name, Col3, Col4 FROM TOKS_Test");
您的代码中很少有其他内容:
SqlConnection
和SqlCommand
对象封装在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;
}
}
请参阅SqlParameter
:Why do we always prefer using parameters in SQL statements?