2015-09-16 30 views
-2
private void save_Click(object sender, EventArgs e) 
{ 
    ACCOUNT.oo.Open(); 
    string QRY = "insert into size(SIZENO,SIZE,COVERAGE,WEIGHT) 
     values('" + size_id.Text + "','" +txt_size.Text + "','" +txt_coverage.Text 
     + "','" +txt_weight.Text + "')"; 
    OleDbCommand ODB = new OleDbCommand(QRY,ACCOUNT.oo); 
    ODB.ExecuteNonQuery(); 
    MessageBox.Show("Inserted Sucessfully.."); 
    ACCOUNT.oo.Close(); 
} 
+2

如果設置一個破發點,什麼是'QRY'的實際價值?也看看參數化您的查詢。字符串連接是最糟糕的。 – sab669

+1

SIZENO,SIZE,COVERAGE,WEIGHT所有數字?刪除已添加的單引號或至少對於數字列。 –

回答

6

它看起來像您的數據庫列是用於數字數據,並且您插入的值被引用。刪除單引號可以解決這個問題。

你也應該參數化查詢,例如:

private void save_Click(object sender, EventArgs e) 
{ 
    ACCOUNT.oo.Open(); 
    string QRY = "insert into size(SIZENO,SIZE,COVERAGE,WEIGHT) values(?,?,?,?)"; 
    using(OleDbCommand ODB = new OleDbCommand(QRY, ACCOUNT.oo)) 
    { 
     // change the OleDbType based on your actual data types 
     ODB.Parameters.Add("SIZENO", OleDbType.Integer).Value = int.Parse(size_id.Text); 
     ODB.Parameters.Add("SIZE", OleDbType.Integer).Value = int.Parse(txt_size.Text); 
     ODB.Parameters.Add("COVERAGE", OleDbType.Integer).Value = int.Parse(txt_coverage.Text); 
     ODB.Parameters.Add("WEIGHT", OleDbType.Integer).Value = int.Parse(txt_weight.Text); 
     ODB.ExecuteNonQuery(); 
    } 
    MessageBox.Show("Inserted Sucessfully.."); 
    ACCOUNT.oo.Close(); 
} 
+1

OleDbCommand不支持MS SQL所提供的* named *參數(例如'@ size_id')。但是,您可以通過其索引訪問參數。所以SQL片段將是'... values(?,?,?,?)';和C#一個'... ODB.Parameters.Add(size_id.Text); ...' –

+1

將'IDisposable'放入'using':'使用(OleDbCommand ODB = new ...){...}' –

+0

將SQL打印爲*單行*時*不可讀*。使用'@「...」'字符串格式使您的查詢文本變得更加多元化,並且通過更加靈活。 –