Параметризованный запрос вставки не работает - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь выполнить то, что мне показалось довольно простым параметризованным запросом на вставку, но сталкиваюсь со всевозможными проблемами. 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.SqlCarser.ObState.WebState.Ont_Ont_Web.Ont .Data.SqlClient.TdsParser.Run (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) при System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader DS, runBehavior runBehavior, String resetOptionsString) на System.Data.SqlClient .SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое значение returnStream, логический асинхронный) в System.Data.SqlClient.SqlCommand.RunExecuteReader (метод CommandBehaviors SqlCommand.InternalExecuteNonQuery (результат DbAsyncResult, Str ing methodName, Boolean sendToPipe) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery () в System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand (команда DbCommand, операция DataSourceOperationSource.ecute.Inte. Значения IDictionary) в System.Web.UI.WebControls.SqlDataSource.Insert () в par_importExcelDataPTS.GetRootID (String short_Text, Int32 string_id, String dbName, String Lang_code) в C: \ Users

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Существует ли конкретная причина, по которой имена параметров отличаются, поскольку это может быть причиной вашей проблемы:

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

SQL - @shrtText varchar(250)

Следуетэто не будет: itemDataSource1.InsertParameters.Add("shrtText", short_Text)

0 голосов
/ 03 ноября 2011

Я полагаю, что вам может понадобиться добавить @ перед именами параметров при их добавлении:

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

Кроме того, если ваш short_text содержит какие-либо одинарные кавычки, SQL не сможет выполнить оценку.Чтобы решить эту проблему, замените все одинарные кавычки в short_Text двумя одинарными кавычками.

Если это не решит вашу проблему, вы можете опубликовать точные сообщения об ошибках, которые вы получаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...