Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C将数据从一个SQL数据库插入到另一个SQL数据库_C#_Sql_Sql Server_Sql Insert - Fatal编程技术网

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

C# 使用C将数据从一个SQL数据库插入到另一个SQL数据库,c#,sql,sql-server,sql-insert,C#,Sql,Sql Server,Sql Insert,我不知道如何用c语言进行这个查询 有两个数据库,每个数据库都有此查询所需的表。我需要从一个数据库表中获取数据,并用相应的payrollID更新另一个数据库表 我在不同的数据库中有两个表,Employee在techData数据库中,strStaff在QLS数据库中。在employee表中,我有StaffID,但需要从strStaff中提取PayrollID Insert payrollID into Employee where staffID from strStaff = staffID fr

我不知道如何用c语言进行这个查询

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

我在不同的数据库中有两个表,Employee在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();

假设您想要将数据添加到现有表中,您必须使用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、bulk insert等。与此相关,将有两个不同的连接对象和两个不同的SQL语句在这些连接上执行

第一个任务是从第一个DB中检索数据,我们使用SELECT SQL语句将其称为源DB/Table,并将其存储在某个临时数据结构中,或者按代码中的行存储,或者使用.NET DataTable对象存储整个表,这将大大提高性能。为此,您应该使用源DB/表btw的第一个连接对象,您可以在获得数据后立即关闭该连接

第二个任务是将数据插入到第二个DB目标DB/表中,尽管从您的业务逻辑来看,如果目标DB/表中已经存在具有相同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/表添加数据您应该根据澄清的业务逻辑(即数据冲突解决方案)进行编码:您想更新现有记录还是跳过,等等。只需迭代DataTable对象中的数据行,并执行INSERT或update SQL操作


希望这能有所帮助。向每个人问好,

?o、 哦,你是说什么时候?并且应该在while语句中添加@StaffID值,并使用ExecuteNonQuery执行它。此外,您应该考虑每次使用参数清除迭代参数。顺便说一下,不清楚要插入哪个列值。您应该像读卡器[0]、读卡器[1]等那样获得此值。。您应该插入该值。标题有误导性:标题中提到的第二个数据库的连接在哪里?请澄清。感谢和问候,您可能希望使用UPDATE+SELECT,请参见:因此,您必须打开到第二个数据库的另一个连接,并正确格式化第二个数据库的INSERT查询。您发布的代码非常混乱:请添加所需的更正,顺便问一下,您确定您谈论的是两个数据库而不是两个表吗?。谢谢大家,代码是错误的,让人困惑,但我只是把它放在上面表示我已经尝试过了。我如何为一个查询创建两个连接字符串?因为我试图在一个数据库中设置payrollID,但需要从另一个数据库中提取数据。@Redheadinferno让我们弄清楚。。。当你说两个数据库。。。这是一个SQL Server实例中的两个数据库吗?或者这两个数据库在不同的SQL Server实例中?两个数据库在两个不同的SQL Server实例中instances@Redheadinferno,创建链接服务器,然后您将能够使用上述查询。有关更多详细信息,请参阅: