2011-05-17 57 views
0

我是個新手,可能是因爲自從昨天早上起牀,但在這個插入語句中找不到我的錯誤。我的處理程序要求我不要爲這個培訓項目進行參數化(它不會被部署),所以不要擔心注入漏洞。無論如何,查詢的權利,數據類型是正確的,並且表和字段名拼寫正確。我在這裏錯過了什麼?有沒有更好的方法來找到它,而不是隻是盯着屏幕,直到它來到你?靠近WHERE的SQL語法?

protected void BtnSubmit_Click(object sender, EventArgs e) 
{ 
    string x = Request.QueryString["SubId"]; 
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    string comQuery = "INSERT INTO Submission (Status, StatusComment, StatusValue) VALUES ('" + "decline" + "', '" + TbComments.Text + "', 2) WHERE SubmissionId =" + x; 
    using (SqlConnection sqlConn = new SqlConnection(connectionString)) 
    { 
     sqlConn.Open(); 
     using (SqlCommand comCmd = new SqlCommand(comQuery, sqlConn)) 
     { 
      comCmd.ExecuteNonQuery(); 
     } 
    } 
} 

回答

11

INSERT不能有WHERE子句。沒有意義,有一個,你把數據,而不是縮小它。

如果您正在嘗試更改已有數據,那是UPDATE,而不是INSERT。這裏有一個例子:

"UPDATE Submission 
SET Status='decline', StatusComment='" + TbComments.Text + "', StatusValue = 2 
WHERE SubmissionId = " + x 
0

您需要使用UPDATE,無法插入 插入插入新行,因此WHERE是沒有意義的

0

所以你的SQL語句是: "INSERT INTO Submission (Status, StatusComment, StatusValue) VALUES (blah) WHERE SubmissionId =" + x;

的問題肯定是WHEREWHERE對於INSERT - See the MSDN documentation for the Insert command無效。由於您按照SubmissionId進行篩選,因此您可能需要改爲執行UPDATE

至於找到問題的更好方法,學習使用MSDN文檔是一個很好的步驟。快速谷歌搜索「msdn t-sql插入」將給你我在此答案前面鏈接到的頁面。文檔,經驗,谷歌和堆棧溢出。這就是你如何找到解決方案:)

0

插入查詢中不允許Where子句。形成你的代碼我猜你需要使用更新查詢。

+0

實際上,它是 – gbn 2011-05-17 14:42:04

3

這是不正確的INSERT語法。正確插入語法是:

INSERT INTO tableName (columnList) VALUES (valueList) 

columnList值列表必須有項目和值的相同數量的類型必須是按列預期。

INSERT INTO tableName (columnList) 
SELECT columnList2 
FROM tableName2 
WHERE conditionsFromTable2 

columnListcolumnList2必須有相同類型的項目相同的計數。您可以使用任何複雜的select連接到多個表,並將條件應用於這些表中的數據。

0

您正在嘗試從TbComments中插入提交數據。所以你需要從TbComments中選擇數據,然後INSERT INTO提交

string comQuery = 
"INSERT INTO Submission (
    Status, 
    StatusComment, 
    StatusValue) 
SELECT 
    'decline', 
    TbComments.Text, 
    2) 
FROM TbComments 
WHERE SubmissionId =" + x;