2015-06-01 34 views
-1

我不知道如何在c#中執行此查詢。使用C將數據從一個SQL數據庫插入到第二個數據庫#

有兩個數據庫,每個都有一個這個查詢所需的表。我需要從一個數據庫表中獲取數據,並使用相應的payrollID更新其他數據庫表。

我有兩個表在單獨的數據庫中,員工在techData數據庫和strStaff在QLS數據庫中。在employee表中,我有StaffID,但需要從strStaff中提取PayrollID。

Insert payrollID into Employee where staffID from strStaff = staffID from Employee 

但是我需要從strStaff獲得staffID和PayrollID,然後才能執行插入查詢。

這是我到目前爲止,但它不會工作。

cn.ConnectionString = ConfigurationManager.ConnectionStrings["PayrollPlusConnectionString"].ConnectionString; 
cmd.Connection = cn; 
cmd.CommandText = "Select StaffId, PayrollID From [strStaff] Where (StaffID = @StaffID)"; 
cmd.Parameters.AddWithValue("@StaffID", staffID); 

//Open the connection to the database 
cn.Open(); 
// Execute the sql. 
dr = cmd.ExecuteReader(); 
// Read all of the rows generated by the command (in this case only one row). 
For each (dr.Read()) { 
    cmd.CommandText = "Insert into Employee, where StaffID = @StaffID"; 
} 
// Close your connection to the DB. 
dr.Close(); 
cn.Close(); 
+1

'對於每個'? o.O你的意思是'while'?並且應該在你的while語句中加入你的'@ StaffID'值並用'ExecuteNonQuery'執行它。你也應該考慮用'Parameters.Clear()'方法每次迭代清除你的參數。順便說一下,不清楚你想要插入的列值。你應該得到像'reader [0],reader [1] etc ..'這樣的值,你應該插入_that_值。 –

+0

對不起,真的不好,在這一點。 – Redheadinferno

+0

在循環中做兩件事:'while(dr。Read()){//獲取參數值//執行INSERT命令}'讓我們知道你被困在哪個部分 - 這裏有很多例子。 –

回答

2

Assuminig,你想將數據添加到現有的表,你必須使用UPDATE + SELECT聲明(正如我在這個問題的評論中提及)。它看起來像:

UPDATE emp SET payrollID = sta.peyrollID 
FROM Emplyoee AS emp INNER JOIN strStaff AS sta ON emp.staffID = sta.staffID 
+0

如何爲一個查詢做兩個連接字符串?正如我將嘗試在一個數據庫中設置payrollID,但需要從另一個數據庫中提取數據。 – Redheadinferno

+0

@Redheadinferno讓我們弄清楚什麼......當你說兩個數據庫時......是一個SQL Server實例中的兩個數據庫?或者是不同SQL Server實例中的兩個數據庫? –

+0

兩個不同的SQL服務器實例上的兩個數據庫 – Redheadinferno

0

我增加了一些清晰,你的問題:基本部分是要創建一個C#程序來完成你的任務(不使用SQL Server Management Studio中,SSIS,批量插入,等等)。與此相關,將會有2個不同的連接對象和2個不同的SQL語句在這些連接上執行。

第一個任務是使用SELECT SQL語句從第一個數據庫中檢索數據(爲了確定,我們稱之爲源數據庫/表),並將其存儲在某個臨時數據結構中,或者按行(如在您的代碼中)或整個表使用.NET DataTable對象,這將大大提高性能。爲此,您應該使用第一個連接對象來源數據庫/表(順便說一下,您可以在獲取數據後立即關閉該連接)。

第二項任務是將數據插入第二個數據庫(目標數據庫/表),儘管從您的業務邏輯來看,如果目標數據庫/表中已經存在具有相同ID的記錄,如何處理可能的數據衝突有點不清楚(需要一些清晰度)。要完成這個操作,你應該使用第二個連接對象和第二個SQL查詢。

的示例代碼段來執行所述第一任務,這允許檢索整個數據到.NET/C#DataTable對象在單次通過如下所示:

private static DataTable SqlReadDB(string ConnString, string SQL) 
{ 
    DataTable _dt; 
    try 
    { 
     using (SqlConnection _connSql = new SqlConnection(ConnString)) 
     { 
      using (SqlCommand _commandl = new SqlCommand(SQL, _connSql)) 
      { 
       _commandSql.CommandType = CommandType.Text; 
       _connSql.Open(); 
       using (SqlCeDataReader _dataReaderSql = _commandSql.ExecuteReader(CommandBehavior.CloseConnection)) 
       { 
        _dt = new DataTable(); 
        _dt.Load(_dataReaderSqlCe); 
        _dataReaderSql.Close(); 
       } 
      } 
      _connSqlCe.Close(); 
      return _dt; 
     } 
    } 
    catch { return null; } 
} 

第二部分(將數據添加到目標DB/Table),您應該根據明確的業務邏輯進行編碼(即數據衝突解決方案:是否要更新現有記錄或跳過等)。只需遍歷DataTable對象中的數據行並執行INSERT或UPDATE SQL操作即可。

希望這可能有所幫助。親切的問候,

相關問題