2016-07-30 22 views
0

所以,C#+数据库 - 从柱,使用INT作为查询检索行数据

在我的程序我有一个计算int Answer

在我的数据库中有六列。 的列有VALUEID,A,B,C,dE.

当我按下一个按钮,我想从A,B,C,d和E,其中回答匹配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

comm.Parameters.AddWithValue连接(““” +价值+“””, “CON”);删除此行并重试 –

回答

0

下面是添加参数的正确方法:

SqlCommand comm = new SqlCommand("SELECT NC, Nodularity, UTS, Elongation, BHN FROM " + 
           "DataISS WHERE ValueID = @value", con); 

comm.Parameters.AddWithValue("@value", Value); 

一个AddWithValue重载的需要在查询该参数值中使用的参数名称。

如果仍然没有得到任何结果,则需要在Visual Studio中使用查询窗口尝试相同的查询。然后,您可以确定可能存在于从c#应用程序发送的错误的Value中的问题,或者您计算用作参数的本地参数的方式。

+0

感谢您的回复。 Value和@value之间的案例差异是否重要? –

+0

这样做时我没有收到任何输出或错误?什么可能是错的?有任何想法吗。 –

+0

@ Dr.Viper它是优选的。但是,不,API在执行时已经添加@,如果它缺失。但我建议您保持清晰。使用SQL查询窗口执行相同的查询,你会得到结果吗? – user3185569

0

结构命令像下面

SqlCommand comm = new SqlCommand("select NC, Nodularity, UTS, Elongation, BHN from DataISS where [email protected]", con); 
comm.Parameters.Add("@ValueID", SqlDbType.Int).Value = Value; 
+0

没有得到任何输出或错误。我可能做错了什么? –

+0

,因为您通过使用“reader [”id“]” –

+0

尝试读取器[0]获取messageBox中的唯一标识。通过阅读器[4], 什么也没有。 SQL查询返回的标量变量未声明为@Value错误 –

-1

我建议在代码中使用“使用”,所以它关闭连接本身。例如:

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

用“@”的字符串之前,这样你可以使用尽可能多的行,而不将它们与+