2013-04-18 84 views
0

我正在使用Visual Studio 2010連接到Access數據庫(2010)。INSERT INTO語句中的語法錯誤(Microsoft Access)

我創建了一個按鈕,從文本框項目添加到數據庫中,我得到的錯誤「語法錯誤INSERT INTO語句中」

protected void upload_Click(object sender, EventArgs e) 
{ 
    if (FileUpload3.HasFile) 
    { 
     try 
     { 
      string filename = Path.GetFileName(FileUpload3.FileName); 
      FileUpload3.SaveAs(Server.MapPath("images") + "/" + filename); 
      Picture.Text = "images/" + filename; 
      Label2.Text = ""; 
     } 
     catch (Exception ex) 
     { 

      Label2.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 



    } 
} 

protected void addnewitem_Click(object sender, EventArgs e) 
{ 


    AccessDataSource1.InsertCommand = "Insert into RAM (RAM Name, picture) values ('" + name.Text.ToString() + ",'" + Picture.Text.ToString() + "')"; 

    AccessDataSource1.Insert(); 
} 
+1

封裝在方括號領域[RAM名稱。我認爲這個錯誤是由於列名中的空格造成的。 「插入RAM([RAM名稱],圖片)值」 –

回答

1

試了一下SQL注入:一個單引號追加到您在「名稱」文本框中輸入的文本。

如果有效,則在查詢中使用參數,而不是從用戶追加文本。

延伸閱讀:

http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html

How do parameterized queries help against SQL injection?

UPDATE

而且使用校正阿爾貝託斯卑爾脫的評論對原來的問題(附包含在括號空格的列名:「RAM名稱」=>「[RAM名稱]」)。這是另一個語法錯誤以及省略的單引號。

+0

:-)殘酷但公平。 – RichieHindle

+0

是的,謝謝你,現在工作正常。 –

1

你缺少一個單引號:

"... values ('" + name.Text.ToString() + "','" + Picture.Text.ToString() + "')" 
             ^

但你不應該使用的字符串連接這樣的 - 使用正確的參數化查詢,而不是,你不會看到這些問題(或更多當您的數據包含單引號時,您會收到危險的注射問題)。

+0

它完美地工作,謝謝。 –

1

嘗試

([RAM Name], picture) 

,而不是

(RAM Name, picture) 

希望這有助於

+0

感謝您的支持:) – Max

相關問題