2016-09-16 2 views
0

Вот код, который работает для Insert - мне просто нужна помощь, чтобы преобразовать его в Update со значениями и синтаксисом предложения where.Исправить синтаксис инструкции MS SQL Update с помощью ADODB.Parameters?

ADODB.Command cmdInsert = new ADODB.Command(); 
cmdInsert.ActiveConnection = conn; 

cmdInsert.CommandText = "INSERT INTO ExchangeTypes(MarketSelectionId) VALUES (?)"; 

//Update statement to be modelled: 
//cmdUpdate.CommandText = "Update ExchangeTypes SET 
//LayOdds = '" & layOdds & "'" & ", 
//Size='" & laySize & "' WHERE 
//MarketId='" & marketid & "'" and SelectionId='" & selectionid & "'" 

cmdInsert.CommandType = ADODB.CommandTypeEnum.adCmdText; 

// Append the parameters 
ADODB.Parameter paramMS = cmdInsert.CreateParameter(
      "MarketSelectionId",       // Parameter name 
      ADODB.DataTypeEnum.adVarChar,    // Parameter type (adVarChar) 
      ADODB.ParameterDirectionEnum.adParamInput, // Parameter direction 
      200,           // Max size 
      umarketiduselectionid);      // Parameter value 

      cmdInsert.Parameters.Append(paramMS); 

      object nRecordsAffected = Type.Missing; 
      object oParams = Type.Missing; 
      cmdInsert.Execute(out nRecordsAffected, ref oParams, 
      (int)ADODB.ExecuteOptionEnum.adExecuteNoRecords); 
+0

Это выглядит, как вы начинаете строить то, что будет быть сумасшедшим, уязвимым для SQL-инъекций. –

ответ

1

ADODB является древним и устаревшим. Он существует исключительно для обратной совместимости со старым кодом версии vb6, когда вы его переносите. Он должен НИКОГДА использовать для нового кода.

Попробуйте с помощью ADO.NET для вставки вместо:

using (var conn As new SqlConnection("connection string here")) 
using (var cmd As new SqlCommand("INSERT INTO ExchangeTypes(MarketSelectionId) VALUES (@MarketSelectionId)", conn) 
{ 
    cmd.Parameters.Add("@MarketSelectionId", SqlDbType.VarChar, 200).Value = umarketiduselectionid; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 

, а затем запрос UPDATE будет выглядеть следующим образом:

using (var conn As new SqlConnection("connection string here")) 
using (var cmd As new SqlCommand("Update ExchangeTypes SET LayOdds = @LayOdds, Size = @LaySize WHERE MarketId= @MarketId AND SelectionId = @SelectionID ", conn) 
{ 
    //Guessing at your column types/lengths here 
    cmd.Parameters.Add("@LayOdds", SqlDbType.VarChar, 200).Value = layOdds; 
    cmd.Parameters.Add("@LaySize", SqlDbType.Int).Value = laySize; 
    cmd.Parameters.Add("@MarketId", SqlDbType.Int).Value = marketid; 
    cmd.Parameters.Add("@SelectionId", SqlDbType.Int).Value = selectionid; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

Большое спасибо, Джоэл. Вы можете сказать, что в последний раз, когда я запрограммировал, было 15 лет назад и даже не на этих технологиях. Я поменяю свое соединение с ADO.Net дальше вашей рекомендации. Очень признателен. – user6063812

+0

То, что я на самом деле пытаюсь сделать, - это прокрутить таблицу и создать строку JSON со списком идентификаторов, и после каждых 40 итераций отправьте запрос JSON и обработайте 40 элементов JSON, возвращенных с помощью обновления с предложением where с подробностями содержащихся в 40 возвращенных запросах JSON. И повторите, что каждые 40 записей читаются. Я знаю, мне нужно 2 запроса - один из них является просто выделенным для цикла, а другой - обновлением. Можете ли вы предоставить основной план, как вы сделали с выбором - я получаю синтаксические ошибки с вашим кодом. Следовательно, использование ADODB более знакомо. – user6063812

+0

Вероятно, вам не хватает импорта (например: system.data, system.data.sqlclient). –

1

Вы Каан обновление вашей таблицы следующим образом:

Синтаксис:MSDN

Update YourTable 
Set Column = Value 
Where Condition 

cmdInsert.CommandText = "Update ExchangeTypes Set MarketSelectionId = VALUE 
Where MarketSelectionId = '?' "; 
+0

Спасибо, Сами. У меня есть работа, которая является большим шагом вперед. Однако похоже, что моя неопытность в выборе связи была раскрыта, и мне нужно перейти на более современные варианты. – user6063812