2011-03-03 49 views
4

我已經看到了這類型下面的MSDN主題UPDATE語句(就像插入語句)的:這是UPDATE TABLE語句正確的MSDN主題

http://msdn.microsoft.com/en-us/library/aa0416cz.aspx#Y2461

UPDATE語句: -

adapter.UpdateCommand = New SqlCommand("UPDATE Customers " & 
    "(CustomerID, CompanyName) VALUES(@CustomerID, @CompanyName) " & _ 
    "WHERE CustomerID = @oldCustomerID AND CompanyName = " & 
    "@oldCompanyName", connection) 

這句話是否正確?

我試着執行它,它給出語法錯誤。

+0

什麼語法錯誤? – Nate 2011-03-03 17:09:00

+0

你目睹了哪些錯誤? – 2011-03-03 17:09:12

+1

sql看起來不錯,它取決於適配器的上下文,以及參數的設置方式。您可以發佈更多的代碼和錯誤消息 – 2011-03-03 17:09:40

回答

6

不,應該是:

UPDATE Customers 
SET 
CustomerID = @CustomerID, 
CompanyName = @CompanyName 
WHERE 
CustomerID = @oldCustomerID AND 
CompanyName = @oldCompanyName 

或將完整的示例代碼,它應該是:

adapter.UpdateCommand = New SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName", connection) 

這裏是你的另一個參考,這種情況:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

3

這SQL似乎是正確的爲INSERT INTO,但沒有爲UPDATE它應該閱讀:

adapter.UpdateCommand = New SqlCommand("UPDATE Customers" & _ 
    " SET CustomerID = @CustomerID, CompanyName = @CompanyName)" & _ 
    " WHERE CustomerID = @oldCustomerID AND CompanyName =" & _ 
    " @oldCompanyName", connection) 

即SQL就是一個會叫paramaterized,這樣(在片段較低)使得這種代碼很重要:

adapter.UpdateCommand.Parameters.Add(_ 
    "@CustomerID", SqlDbType.NChar, 5, "CustomerID") 
adapter.UpdateCommand.Parameters.Add(_ 
    "@CompanyName", SqlDbType.NVarChar, 30, "CompanyName") 

' Pass the original values to the WHERE clause parameters. 
Dim parameter As SqlParameter = dataSet.UpdateCommand.Parameters.Add(_ 
    "@oldCustomerID", SqlDbType.NChar, 5, "CustomerID") 
parameter.SourceVersion = DataRowVersion.Original 
parameter = adapter.UpdateCommand.Parameters.Add(_ 
    "@oldCompanyName", SqlDbType.NVarChar, 30, "CompanyName") 
parameter.SourceVersion = DataRowVersion.Original 
+0

'更新表(列,列)值(值,值)'不適用於我.. – Blorgbeard 2011-03-03 17:30:29

+1

你是對的!它應該是'... SET col1 = @ val1,col2 = @ val2' – Nate 2011-03-03 17:32:46

2

至於我能看到語法無效。以下給出Incorrect syntax near '('.

我建議改變它按Dan's answer

CREATE TABLE Customers 
(
CustomerID INT, 
CompanyName VARCHAR(10) 
) 

DECLARE 
@CustomerID INT, 
@CompanyName VARCHAR(10), 
@oldCustomerID INT, 
@oldCompanyName VARCHAR(10) 

UPDATE Customers (CustomerID, CompanyName) 
VALUES(@CustomerID, @CompanyName) 
WHERE CustomerID = @oldCustomerID AND CompanyName = @oldCompanyName