2016-04-21 44 views
0

我試圖用SQL INSERT INTO將剛上傳的img源插入到數據庫中。INSERT INTO - 在SQL語句末尾缺少分號(;)

這是我得到的行:

「缺少分號(;)在SQL語句的結束。」

錯誤。

command.CommandText = "INSERT INTO users (pic) VALUES (Images/"+fileName+") WHERE id="+theId; 

這是整個.aspx.cs文件:

using System; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO; 
using System.Collections.Generic; 

public partial class CS : System.Web.UI.Page 
{ 

    protected void Upload(object sender, EventArgs e) 
    { 

    if (FileUpload1.HasFile) 
    { 
     string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 
     FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Images/") + fileName); 

     string theId = Request.Cookies["Logged"].Value; 
     System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(); 
     connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Etay\Documents\Visual Studio 2012\WebSites\Josef\Shared\users.mdb"; 
     try 
     { 
      System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(); 
      command.Connection = connection; 
      connection.Open(); 
      command.CommandText = "INSERT INTO users (pic) VALUES (Images/"+fileName+") WHERE id="+theId; 
      int rows = command.ExecuteNonQuery(); 
      Response.Redirect("~/signIn.cshtml"); 
     } 
     finally 
     { 
      connection.Close(); 
     } 
    } 
    } 
} 
+6

請不要將文件名和id連接到SQL語句中。使用參數,或者你自己設置SQL注入。 – BlakeH

+0

刪除sql-server標記,使用MS Access。你得到不正確的MS Access代碼答案(OleDb) – Crowcoder

+0

重定向的正確方法是:'Response.Redirect(url,false); \t Context.ApplicationInstance.CompleteRequest();' – Crowcoder

回答

7

幾件事情:

  • INSERT語句沒有WHERE子句,你可能需要 UPDATE聲明,如果您正在嘗試修改現有記錄。
  • 使用參數。你很容易SQL注入

如果你要INSERT新的記錄那麼語句應該是這樣的:

command.CommandText = "INSERT INTO users (pic) VALUES (@image)"; 
command.Parameters.AddWithValue("@image", "Images/" + fileName); 

如果你要更新,然後使用:

command.CommandText = "UPDATE users SET PIC = @images WHERE [email protected]"; 
command.Parameters.AddWithValue("@image", "Images/" + fileName); 
command.Parameters.Add(new SqlParameter("@id", SqlDbType.Int) {Value = theId}); 

同時考慮附上ConnectionCommand對象using聲明,以確保正確處置資源。

只注意到你實際上正在瞄準MS Access。使用參數的概念應該與SQL Server保持一致。請參閱OleDbcommandusing parameters inserting data into access database

+0

問題被錯誤標記,請注意連接字符串。 – Crowcoder

+0

@Crowcoder,謝謝,你說得對。 – Habib

+0

在MS Access中,無論您輸入的標識符如何,實際參數都將作爲位置傳入。有些事情要注意。 – willaien