2016-07-30 91 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; 
    } 

用「@」的字符串之前,這樣你可以使用盡可能多的行,而不將它們與+