2013-04-21 43 views
0

當命令到達cmd.ExecuteNonQuery時,我收到「語法錯誤」錯誤消息。使用OLE DB插入到數據庫表中.NET提供程序將不起作用

重要的是我使用string.Format,並且結構保持儘可能接近當前結構。

 { 
      OleDbConnection con = DAL.GetConnection(); 
      con.Open(); 
      if (con.State == ConnectionState.Open) 
      { 
       string s = string.Format("INSERT INTO DataTable1 (Username, Password, FName, LName, Bdate, Sex, City, Mail) VALUES ('{0}', '{1}', '{2}', '{3}', #{4}#, {5}, {6}, '{7}')", uname, pass, fname, lname, bd, sex, city, mail); 
       OleDbCommand cmd = DAL.GetCommand(con, s); 
       int check = cmd.ExecuteNonQuery(); 
       if (check == 0) 
       { 
        con.Close(); 
        Response.Redirect("Reg.aspx?err=-An error has occured. Please try again-"); 
       } 

謝謝。

+6

寫這樣的SQL留給你[SQL注入攻擊](http://bobby-tables.com)... – 2013-04-21 18:52:29

+0

我知道使用string.format很重要,但我有一個建議給你。不要使用string.Format。檢查預先準備的語句或參數。 – 2013-04-21 19:02:28

回答

4

也許你已經在通過一些文字報價,請嘗試使用參數...

string s = "INSERT INTO DataTable1 (Username) VALUES (@user)"; 
OleDbCommand cmd = DAL.GetCommand(con, s); 
//Add the parameter ... 
OleDbParameter nam = new OleDbParameter("@user",uname); 
cmd.Parameters.Add(nam); 
1

退房OleDbCommand.Parameters如果您還沒有。這是更安全的(沿着@Mark B的評論),它可能會清除你的語法錯誤。

如果您堅持採用純粹的String.Format方法,只需輸出cmd.CommandText進行調試即可查看語法錯誤所在的位置。

相關問題