所以,
我的程序中有一个计算出的int Answer
。
在我的数据库中有六列。 列是 ValueID,A,B,C,D 和 E。
当我按下按钮时,我想要A,B,C,D和E中的值,其中Answer与ValueID匹配,显示在消息框中。
我现在正在做的事情(可能是愚蠢的)如下:
public void button1_Click(object sender, EventArgs e)
{
int Answer;
if (radioButton3.Checked)
{
Answer = Grade3 + Addition + PTime;
}
else
{
Answer = Grade + Addition + PTime;
}
//MessageBox.Show("Answer is: " + Answer);
int Value = Answer;
try
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB; AttachDbFilename =|DataDirectory|\dbiss.mdf; Integrated Security = True; Connect Timeout = 30");
con.Open();
//SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM DataISS WHERE ValueID = '" + Value + "'", con);
SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM " +
"DataISS WHERE ValueID = @value", con);
comm.Parameters.AddWithValue("@value", Value);
using (SqlDataReader reader = comm.ExecuteReader())
{
if (reader.Read())
{
MessageBox.Show(String.Format("{0}", reader["id"]));
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
以下是添加参数的正确方法:
input
SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM " +
"DataISS WHERE ValueID = @value", con);
comm.Parameters.AddWithValue("@value", Value);
的一个重载采用查询中使用的参数名称和该参数的值。
如果您仍然无法获得任何结果,则需要使用Visual Studio中的“查询窗口”尝试相同的查询。然后,您可以确定可能在c#应用程序发送的错误AddWithValue
中出现的问题,或者您计算用作参数的Value
本地参数的方式。
答案 1 :(得分:0)
结构命令如下
SqlCommand comm = new SqlCommand("select NC, Nodularity, UTS, Elongation, BHN from DataISS where ValueID=@ValueID", con);
comm.Parameters.Add("@ValueID", SqlDbType.Int).Value = Value;
答案 2 :(得分:-1)
我建议在代码中使用“using”,因此它会自行关闭连接。例如:
public static bool SomeMethod(int valueId)
{
bool result;
try
{
using (SqlConnection connection = new SqlConnection(DataConnection.MailForm))
{
connection.Open();
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = @"SELECT COUNT(*) FROM Mails
WHERE ValueID= @valueId";
cmd.Parameters.AddWithValue("@valueId", valueId);
int entryIdExist = Convert.ToInt32(cmd.ExecuteScalar());
result = entryIdExist <= 0;
}
}
}
catch (Exception)
{
result = false;
}
return result;
}
在字符串前使用“@”,这样就可以使用尽可能多的行而无需用+
连接它们