2013-10-18 26 views
-1

因此,DataAdapter.Fill語法錯誤

試圖編寫一個非常簡單的方法來更新數據庫中的單個列。我不斷收到「語法錯誤」的運行時錯誤的註釋行下方附近

public void SaveStatus(string id, string step) 
    { 
     // assuming that there is only one matching student ID 
     connect = new SqlConnection(connectionString); 
     connect.Open(); 
     dataSet = new DataSet(); 
     string command = "SELECT * FROM tblSubmissions WHERE Id = " + id; 
     dataAdapter = new SqlDataAdapter(command, connect); 

     dataAdapter.Fill(dataSet, "tblSubmissions"); // syntax error near here 

     dataSet.Tables[0].Rows[0]["StatusID"] = step; 

     dataAdapter.Update(dataSet, "tblSubmissions"); 
     dataAdapter.Dispose(); 
     connect.Close(); 
     connect.Dispose(); 

    } 

希望有人能指出這一明顯的問題我失去了

+2

後確切的錯誤。運行時錯誤!=語法錯誤,所以它在SQL中。發佈CREATE TABLE腳本。 –

+1

調試並檢查你的'Id'變量是什麼?您應該使用參數化查詢而不是傳遞字符串。 – Kaf

+0

錯誤是:System.Data.SqlClient.SqlException:'bba6323c0'附近的語法不正確 – deadEddie

回答

3

查詢應該是"SELECT * FROM tblSubmissions WHERE Id = 'id_value' - 你錯過了引用圍繞id值。

使用parametrised查詢,而不是字符串連接的解決您的問題,並擺脫了SQL注入問題:

SqlCommand cmd = new SqlCommand("SELECT * FROM tblSubmissions WHERE Id = @id" , connect); 
cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier); 
cmd.Parameters["@id"].Value = id; 
+0

謝謝Marek。所以,我已經意識到表中我保存這個值的數據類型是一個Guid,所以即使你給了我所問的問題最好的答案,但我有點卡在(因爲有沒有SqlDbType.Guid) – deadEddie

+0

@deadEddie我認爲你需要使用'SqlDbType.UniqueIdentifier'。 –