使用c#将数据从一个SQL数据库插入到另一个SQL数据库

本文关键字:数据库 SQL 一个 插入 另一个 数据 使用 | 更新日期: 2023-09-27 17:52:42

我不知道如何在c#中做这个查询。

有两个数据库,每个数据库都有这个查询所需的表。我需要从一个数据库表中获取数据,并用相应的payrollID更新另一个数据库表。

我有两个表在不同的数据库,员工这是在techData数据库和strStaff在QLS数据库。在员工表中,我有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();

使用c#将数据从一个SQL数据库插入到另一个SQL数据库

假设您要向现有表添加数据,则必须使用UPDATE + SELECT语句(正如我在对问题的评论中提到的那样)。它可能看起来像:

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

我已经为你的问题添加了一些清晰度:重要的部分是你想创建一个c#过程来完成你的任务(不使用SQL Server Management Studio, SSIS,批量插入等)。与此相关,将有2个不同的连接对象,以及在这些连接上执行的2个不同的SQL语句。

第一个任务是使用SELECT SQL语句从第一个DB(确定让我们称之为源DB/表)检索数据,并将其存储在一些临时数据结构中,无论是每一行(如在您的代码中),还是使用。net DataTable对象的整个表,这将大大提高性能。为此,您应该使用第一个连接对象来获取DB/Table(顺便说一句,您可以在获得数据后立即关闭该连接)。

第二个任务是将数据插入第二个DB(目标DB/Table),尽管从您的业务逻辑来看,如果目标DB/Table中已经存在具有相同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操作。

希望这能有所帮助。亲切的问候,