2011-11-03 70 views
0

我試圖運行我認爲是一個相當簡單的參數化插入查詢,但遇到各種各樣的問題。 SQL EXPRESS 08R2,VB.net參數化插入查詢不起作用

這裏是VB代碼,構建參數... 更新的變量名:

itemDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings("MyConnectionString").ToString() 
itemDataSource1.InsertCommandType = SqlDataSourceCommandType.StoredProcedure 
itemDataSource1.InsertParameters.Add("@short_Text", short_Text) 
itemDataSource1.InsertParameters.Add("@foreignTable", foreignTable) 
itemDataSource1.InsertCommand = "usp_insertLangShortText"   ' Call stored procedure 

'*********************************************************************** 
' Begin the insertion. Check for errors during insert process. 

Dim rowsAffected As Integer = 0 
rowsAffected = itemDataSource1.Insert() 

這裏是我試圖執行與插入的SP。

@short_Text varchar(250), 
@foreignTable varchar(250) 

AS 
/* SET NOCOUNT ON */ 
DECLARE @sql varchar(max); 

    BEGIN 
SET @sql = 'INSERT INTO ' + @foreignTable + ' (short_Text) VALUES (''' + @short_Text + ''')'; 
    END 

print (@sql) 
EXECUTE(@sql); 
SET @sql = '' 

RETURN 

有關如何更智能地編寫代碼的建議值得歡迎。

這是錯誤.... System.Data.SqlClient.SqlException:過程或函數usp_insertLangShortText指定的參數太多。 System.Data.SqlClient.SqlConnection.OnError(SqlException異常,布爾breakConnection)System.Data.SqlClient.SqlInternalConnection.OnError(SqlException異常,布爾breakConnection)在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)在系統上System.Data.SqlClient上的System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)上的.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) .SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布爾returnStream,布爾異步)在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布爾returnStream,字符串方法,DbAsyncResult結果)在System.Data.SqlClient。 SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,Str在System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand命令,DataSourceOperation操作)System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert()上System.Data.SqlClient.SqlCommand.ExecuteNonQuery()方法名,布爾sendToPipe IDictionary值)在System.Web.UI.WebControls.SqlDataSource.Insert()at par_importExcelDataPTS.GetRootID(String short_Text,Int32 string_id,String dbName,String Lang_code)在C:\ Users

回答

0

我相信,你可能需要在參數名前加一個@當你添加它們:

itemDataSource1.InsertParameters.Add("@short_Text", short_Text) 
itemDataSource1.InsertParameters.Add("@foreignTable", foreignTable) 

另外,如果您的short_text包含任何單引號,SQL將無法評估。要解決此問題,請用兩個單引號替換short_Text中的所有單引號。

如果這樣不能解決您的問題,您可以發佈您收到的確切錯誤消息嗎?

+0

撇號已全部轉義,文本字符串沒有沒有更新的撇號。我會嘗試更改@符號。 – htm11h

+0

沒有運氣,更新的原始發佈。 – htm11h

+0

嗯,例外有助於:由於某種原因,你的參數沒有做到這一點。我有兩個想法可能是因爲:1)設置InsertCommand時,參數會被清除;嘗試將它移動到設置參數的區域上方; 2)short_text是Nothing;在調試中進入代碼並確保設置了該值。 –

2

是否有一個特定的原因參數名稱,因爲這不同可能會導致您的問題:

C# - itemDataSource1.InsertParameters.Add("short_Text", short_Text)

SQL - @shrtText varchar(250)

豈不是:itemDataSource1.InsertParameters.Add("shrtText", short_Text)

+0

我會更新和測試這個。請等待。 – htm11h

+0

沒有,沒有解決這個問題。 – htm11h

+0

你可以嘗試'itemDataSource1.InsertParameters [「short_Text」]。DefaultValue = short_Text'這兩個參數,而不是.add方法 –