C#+数据库 - 使用int作为列中的查询来检索行数据

时间:2016-07-30 08:05:40

标签: c# wpf database

所以,

我的程序中有一个计算出的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);
        }
    }

非常感谢任何帮助。

3 个答案:

答案 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;
    }

在字符串前使用“@”,这样就可以使用尽可能多的行而无需用+

连接它们