2012-09-07 76 views
1

我具有以下的C#代碼:如果SQL命令在這種情況下被組合 - C#

基本上我選擇從表A /數據庫1中的一行和表A /插入的Database2它。

然後,我再次打開連接並從TableB/Database1(使用從TableA/Database1檢索到的newID)中選擇多行並插入到TableB/Database2中。

我的問題是這樣做的正確方法?還是應該將這些結合起來?如果這些應該結合起來,任何人都可以告訴我最好的方法來實現這一目標嗎?

int newID = 0; 
using (var con1 = new SqlConnection(conString1)) 
using (var con2 = new SqlConnection(conString2)) 
{ 
    con1.Open(); 
    con2.Open(); 
    using (var selectCommand = new SqlCommand(sqlSelect, con1)) 
    { 
     using (var reader = selectCommand.ExecuteReader()) 
     { 
      try 
      { 
       if (reader != null) 
        if (reader.Read()) 
        { 
         using (var insertCommand = new SqlCommand(sqlInsert, conTarget)) 
         { 
          for (int i = 0; i < reader.FieldCount; i++) 
          { 
           insertCommand.Parameters.AddWithValue(
            "@" + reader.GetName(i), reader[i]); 
          } 
          newID = (int)insertCommand.ExecuteScalar(); 
         } 
        } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      { 
       reader.Close(); 
      } 
     } 
    } 
} 

我傳遞NEWID作爲價值的選擇例子之一:

Select Id, student as newID, Class from Student where class = 10

using (var con1 = new SqlConnection(ConString1)) 
{ 
    con1.Open();    
    var cmd = new SqlCommand(query , con1); 
    var reader = cmd.ExecuteReader(); 

    using (var con2 = new SqlConnection(conString2)) 
    { 
     con2.Open(); 

     using (var sbc = new SqlBulkCopy(conString2)) 
     { 
      sbc.BulkCopyTimeout = 2000; 
      sbc.DestinationTableName = "student"; 
      try 
      { 
       if (reader != null) 
        sbc.WriteToServer(reader); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      {        
       reader.Close(); 
      } 
     } 
    } 
}  
+0

這兩個數據庫都在同一臺服務器上? – Sankara

回答

0

我會做的是一樣的東西:

  1. 打開連接1和選擇您需要從第一個數據庫獲取所有數據。將這些數據存儲在某個對象中。
  2. 打開連接2並根據存儲在步驟創建的對象的值更新第二數據庫1.

這將使你使用一個連接到每個數據庫,完成你正在做同樣的事情以上。

讓我知道你是否需要進一步的幫助。

+0

我怎樣才能在這種情況下一次運行兩個sql命令?我可以使用使用語句,並仍然在一個連接下運行兩個命令?你能告訴我一些代碼嗎? – NoviceMe