2014-10-17 36 views
0

我需要插入新記錄到一個SQL Server數據庫,但得到SQL語句正常工作在SQL Server數據庫中,但在vb.net錯誤

不正確的語法錯誤

奇怪當我嘗試在SQL Server本身查詢相同的語句時,它正常工作。

在vb.net的代碼如下:

insertSql = "INSERT INTO Seg_LINE VALUES (" & OBJECTID & ", 'test" + "', '" + "test" + "','" + DrainName + "'," & UID & ")" 
logger.Info("insert sql = " + insertSql) 
Dim cmdInsert As New SqlClient.SqlCommand(insertSql, Sqlconnection) 
cmdInsert.ExecuteNonQuery() 

OBJECTIDUID是數參數。

我無法弄清楚我的代碼有什麼問題,我正在使用vb.net(vs2102)。

+1

此代碼容易受到sql注入攻擊...它實際上是乞求被黑客攻擊。 – 2014-10-17 03:21:31

+0

什麼是logger.Info的SQL語句輸出? – 2014-10-17 03:32:35

+0

嗨,記錄的sql語句是:insert sql = INSERT INTO Seg_LINE VALUES(635,'test','test','Kallang',93571) – user30643 2014-10-17 03:55:23

回答

2

最有可能你有一個DrainName值與一個單引號。幸運的是,查詢只是失敗,並且不會在您的數據庫服務器上執行不需要的命令。不要像那樣使用字符串連接來構建查詢!您需要使用查詢參數,如下所示:

insertSql = "INSERT INTO Seg_LINE VALUES (@ObjectID, 'test', 'test', @DrainName, @UID)" 
logger.Info("insert sql = " + insertSql) 
Dim cmdInsert As New SqlClient.SqlCommand(insertSql, Sqlconnection) 
'I'm guessing at these parameter types. Use the actual db types of the columns 
cmdInsert.Parameters.Add("@ObjectID", SqlDbType.Int).Value = OBJECTID 
cmdInsert.Parameters.Add("@DrainName", SqlDbType.NChar, 50).Value = DrainName 
cmdInsert.Parameters.Add("@UID", SqlDbType.Int).Value = UID 
cmdInsert.ExecuteNonQuery() 

以這種方式更改代碼也可能會修復您的語法錯誤。

+0

嗨Joel,非常感謝答覆,但結果是相同的。當我試圖創建一個新的函數並使用相同的代碼時,它可以正常工作。 – user30643 2014-10-17 04:05:56

+0

另一件要提及的是雖然有錯誤,數據存儲到數據庫表,但程序不會繼續進行。 – user30643 2014-10-17 04:14:48

+0

嗨Joel,當我將ExecuteNonQuery更改爲ExecuteScalar時,它正常工作,感謝您的關注。 – user30643 2014-10-17 06:42:58

相關問題