2014-10-07 1 views
0

Ниже приведен код, который я пытаюсь выполнить с помощью ado.net. Что я делаю не так?Удалить записи с помощью предложения «in» с помощью ado.net

Trying to delete records using ado.net 

    private const string SqlDeleteMultiple = @"   
    DELETE FROM [Board] 
    WHERE 
    [Id] in (@Ids) 
    "; 

    public void DeleteMultiple(string items) 
     { 
      ArgumentValidator.ThrowOnNull("item", items); 

      /* var sbItems = new StringBuilder(); 

       sbItems.Append("'"); 
       sbItems.Append(items); 
       sbItems.Replace(",", "','"); 
       sbItems.Append("'");*/ 


      try 
      { 
       using (var conn = new SqlConnection(_connectionString)) 
       { 
        conn.Open(); 
        using (var cmd = new SqlCommand(SqlDeleteMultiple,conn)) 
        { 
         cmd.Parameters.Add(new SqlParameter("@Ids", SqlDbType.VarChar) {Value = items}); 
         cmd.ExecuteNonQuery(); 
        } 
       } 
      } 
      catch (Exception err) 
      { 
       _logger.Log(LogLevel.Error, err, "Error calling Delete"); 
       throw err; 
      } 
     } 

Ошибка преобразования при преобразовании значения varchar '9,8' в тип данных int. Если я изменил SqlDbType на Int .., я получаю еще одну ошибку.

ответ

0

вашего @Ids содержит список значений, но вы предоставляете только один SqlParameter ... добавить SqlParameter для каждого значения в списке, и он должен работать

вы также можете использовать таблицу значного параметр для передачи списка к хранимой процедуре ... но вам нужно поставить инструкцию delete в хранимую процедуру и создать определенный пользователем тип на стороне сервера ...

 Смежные вопросы

  • Нет связанных вопросов^_^