参数化插入查询不起作用

时间:2011-11-03 18:36:47

标签: vb.net tsql

我正在尝试运行我认为是一个相当简单的参数化插入查询,但遇到了各种各样的问题。 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) System.Data.SqlClient上的System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,DbAsyncResult结果)中的.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)。 SqlCommand.InternalExecuteNonQuery(DbAsyncResult结果,Str荷兰国际集团方法名,布尔sendToPipe)在System.Data.SqlClient.SqlCommand.ExecuteNonQuery()在System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(的DbCommand命令,DataSourceOperation操作)在System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert( IDictionary的值)在System.Web.UI.WebControls.SqlDataSource.Insert()在par_importExcelDataPTS.GetRootID(字符串short_Text,的Int32 string_id,字符串DBNAME,字符串LANG_CODE)在C:\用户

2 个答案:

答案 0 :(得分:2)

参数名称是否有特定原因,因为这可能导致您的问题:

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

SQL - @shrtText varchar(250)

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

答案 1 :(得分:0)

我相信您可能需要在添加参数名称前面添加@:

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

此外,如果您的short_text包含任何单引号,则SQL将无法评估。要解决此问题,请使用两个单引号替换short_Text中的所有单引号。

如果这不能解决您的问题,您是否可以发布您收到的确切错误消息?