2017-03-23 52 views
-1

我對c#還是比較陌生,所以這可能很愚蠢,但我希望能夠從c#中的標籤中的SQL表中的字段字段顯示單個值(tuition_fee),依賴於「tuition_code」已進入..(studenttuition_code)是學費代碼在SQL中相比)如何從sql字段獲取值到c#中的標籤?

這是到目前爲止我的代碼:

using (SqlConnection con = new SqlConnection(_connectionstring)) 
{ 
    con.Open(); 
    string sqlQuery = string.Format("SELECT tuition_fee FROM Tuition WHERE tuition_code = '{0}'", studenttuition_code); 
    SqlCommand cmd = new SqlCommand(sqlQuery, con); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
    lblAmount.Text = dr.GetValue; 
    } 
    con.Close(); 
} 

這是我在學費表的SQL:

CREATE TABLE Tuition 
(
    tuition_code VARCHAR (6) NOT NULL, 
    tuition_instrument VARCHAR (3) NOT NULL, 
    tuition_lessonno INT NOT NULL, 
    tuition_roomcode VARCHAR (3) NOT NULL, 
    tutor_id VARCHAR (4) NOT NULL, 
    tuition_fee DECIMAL NOT NULL, 
    CONSTRAINT pk_tuition PRIMARY KEY (tuition_code), 
    CONSTRAINT fk_tuitionroomcode FOREIGN KEY (tuition_roomcode) REFERENCES Room(room_code), 
    CONSTRAINT fk_tutorfortuiton FOREIGN KEY (tutor_id) REFERENCES Tutor(tutor_id) 
) 
+0

如果你有'string.Format'函數,你不需要在單個單引號周圍包裹'{}'..刪除單引號也會發生什麼,當你執行代碼/通過調試運行。 。? – MethodMan

+2

使用參數化;在執行查詢之前用'@ tuitionCode'替換''{0}'',然後執行'cmd.Parameters.AddWithValue(「@ tuitionCode」,studenttuition_code);''這是爲了防止SQL注入。 –

回答

1

你應該在你的查詢使用參數。通過避免SQL注入,這使得您的查詢更安全,並且它還使得格式化變得更容易,因爲您不必擔心使用單引號和所有爵士樂。

除非你的SQL獲得多於一行(它可能不應該),否則你只需要做一次dr.Read()。 您還應該在每個這些SQL對象上使用using,因爲它們都實現了IDisposable。

string sqlQuery = "SELECT tuition_fee FROM Tuition WHERE tuition_code = @tuitionCode"; 
using (var con = new SqlConnection(_connectionstring)) 
{ 
    con.Open(); 
    using (var cmd = new SqlCommand(sqlQuery, con)) 
    { 
     cmd.Parameters.AddWithValue("@tuitionCode", studenttuition_code); 
     using (var dr = cmd.ExecuteReader()) 
     { 
      dr.Read(); 
      lblAmount.Text = dr.GetString(0); 
     } 
    } 
    con.Close(); 
} 
0

我不知道我是否理解你的問題,但我希望能幫到你。

試試這個波紋管。

using (SqlConnection con = new SqlConnection(_connectionstring)) 
{ 
    con.Open(); 
    string sqlQuery = "SELECT TOP 1 tuition_fee FROM Tuition WHERE  
    tuition_code = @tuitionCode"; 
    SqlCommand cmd = new SqlCommand(sqlQuery, con); 
    cmd.Parameters.AddWithValue("@tuitionCode", studenttuition_code); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
    lblAmount.Text = dr["tuition_fee"].ToString(); 
    } 
    con.Close(); 
} 
+0

應該可能工作,儘管如果在select語句中執行'TOP 1',你可以取出while循環 –

+1

而沒有訂單的頂部1無法知道哪一行會回來。如果只有1行的可能性,那麼頂端是毫無意義的。 –

0
using (var con = new SqlConnection(_connectionstring)) 
{ 
    con.Open(); 
    string sqlQuery = "SELECT tuition_fee FROM Tuition WHERE tuition_code = @tuitionCode"; 
    var cmd = new SqlCommand(sqlQuery, con); 
    cmd.Parameters.AddWithValue("@tuitionCode", studenttuition_code); 
    var dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
    lblAmount.Text = dr.GetValue; 
    } 
    con.Close(); 
}