2013-03-27 5 views
0

Мне нужно обновить несколько таблиц, которые имеют одно и то же поле.Обновление нескольких таблиц с использованием одного и того же SQLParameter?

прямо сейчас у меня есть отдельное заявление обновления для каждой таблицы, как так:

try 
     { 
      using (SqlConnection conn = new SqlConnection(cCon.getConn())) 
      { 

       using (SqlCommand cmd = conn.CreateCommand()) 
       { 
conn.Open(); 
        cmd.CommandText = "update table0 set active= 'N' where [email protected]"; 
        cmd.Parameters.Add(new SqlParameter("@id", id)); 
        cmd.ExecuteNonQuery(); 

        cmd.Parameters.Clear(); 
        cmd.CommandText = "update table1 set active= 'N' where id= @id "; 
        cmd.Parameters.Add(new SqlParameter("@id", id)); 
        cmd.ExecuteNonQuery(); 

        cmd.Parameters.Clear(); 
        cmd.CommandText = "update table2 set active= 'N' where id= @id " 
        cmd.Parameters.Add(new SqlParameter("@id", id)); 
        cmd.ExecuteNonQuery(); 

        cmd.Parameters.Clear(); 
        cmd.CommandText = "update table4 set active= 'N' where id= @id " 
        cmd.Parameters.Add(new SqlParameter("@id", id)); 
        cmd.ExecuteNonQuery(); 
       } 
      } 
     } 

можно оптимизировать код, чтобы сделать его менее звонки? возможно, объединить все обновления в 1 командный текст и выполнить только один раз?

так как это все те же параметры, я думаю, это должно быть возможно? или я должен просто сделать хранимую процедуру?

ответ

1

В идеале, вы бы вызов хранимой процедуры справиться с этим. . Однако использование того же параметра в заявке будет работать также:

cmd.CommandText = @"update table0 set active= 'N' where [email protected]; 
     update table1 set active= 'N' where id= @id; 
     update table2 set active= 'N' where id= @id; 
     update table4 set active= 'N' where id= @id;"; 
cmd.Parameters.Add(new SqlParameter("@id", id)); 
cmd.ExecuteNonQuery(); 
+0

Я создал хранимую процедуру, спасибо! –

0

Удаляется

cmd.Parameters.Clear(); 

И вы используете этот код только один раз

cmd.Parameters.Add(new SqlParameter("@id", id)); 

так:

cmd.CommandText = "update table0 set active= 'N' where [email protected]"; 
        cmd.Parameters.Add(new SqlParameter("@id", id)); 
        cmd.ExecuteNonQuery(); 


        cmd.CommandText = "update table1 set active= 'N' where id= @id "; 
        cmd.ExecuteNonQuery(); 

        cmd.CommandText = "update table2 set active= 'N' where id= @id " 
        cmd.ExecuteNonQuery(); 

        cmd.CommandText = "update table4 set active= 'N' where id= @id " 
        cmd.ExecuteNonQuery(); 
        cmd.Parameters.Clear(); 
1
const string query = @"update {0} set active= 'N' where [email protected];"; 

public string GetCommandText(string table) 
{ 
    return string.Format(query, table); 
} 

public IEnumerable<string> GetTables() 
{ 
    yield return "table0"; 
    yield return "table1"; 
    yield return "table2"; 
    yield return "table4"; 
} 

using (SqlCommand cmd = conn.CreateCommand()) 
{ 
    cmd.Parameters.Add(new SqlParameter("@id", id)); 
    cmd.CommandText = GetTables().Select(GetCommandText).Aggregate((s, s1) => s + s1); 

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