C# 使用C将数据从一个SQL数据库插入到另一个SQL数据库
我不知道如何用c语言进行这个查询 有两个数据库,每个数据库都有此查询所需的表。我需要从一个数据库表中获取数据,并用相应的payrollID更新另一个数据库表 我在不同的数据库中有两个表,Employee在techData数据库中,strStaff在QLS数据库中。在employee表中,我有StaffID,但需要从strStaff中提取PayrollIDC# 使用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
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,创建链接服务器,然后您将能够使用上述查询。有关更多详细信息,请参阅: