使用 C# dataAdapter.Fill() 和 dataAdapter.Update() 将表的数据从一个数据库传输到另一个数据库的同一个表

Posted

技术标签:

【中文标题】使用 C# dataAdapter.Fill() 和 dataAdapter.Update() 将表的数据从一个数据库传输到另一个数据库的同一个表【英文标题】:Transfer data of a table from one database, to the same table of another database, using C# dataAdapter.Fill() and dataAdapter.Update() 【发布时间】:2017-05-02 10:39:26 【问题描述】:

我需要将表的内容转移到位于另一个数据库中的同一个表中,我使用 C# dataAdapter.Fill()dataAdapter.Update() 编写了这个简单的代码,但它似乎不像我想象的那样工作。

SqlConnection sqlConnection = new SqlConnection(strSqlConnectionString);
SqlConnection sqlConnection2 = new SqlConnection(strSqlConnectionString2);

sqlConnection.Open();
sqlConnection2.Open();
DataSet CustomerDataSet = new DataSet();

SqlDataAdapter sqlDA;
SqlDataAdapter sql2DA;

SqlCommandBuilder sqlCmdBuilder;
SqlCommandBuilder sqlCmdBuilder2;

sqlDA = new SqlDataAdapter("SELECT * FROM Articolo;", sqlConnection);
sqlDA2 = new SqlDataAdapter("SELECT * FROM Articolo;", sqlConnection2);

sqlCmdBuilder = new SqlCommandBuilder(sqlDA);
sqlCmdBuilder2 = new SqlCommandBuilder(sqlDA2);

sqlDA.Fill(CustomerDataSet, "Articolo");       

sqlDA2.Fill(CustomerDataSet, "Articolo");

sqlDA2.Update(CustomerDataSet, "Articolo");`

我想要做的是让第二个数据库(字符串连接:strSqlConnectionString2)具有更新的数据,取自第一个数据库,利用 dataAdapter.Fill() + 的功能dataAdapter.Update()。 这可能吗?除了将 Access db 作为第二个 db 之外,我可以做同样的事情吗?

【问题讨论】:

为什么不像存储过程那样只使用数据库呢?此处示例:***.com/questions/187770/… 因为我想在需要的时候更新第二个数据库的表行,所以如果我在两个表中都有相同的行,我忽略它,如果该行不存在,我添加它到第二个表,然后如果该行已经存在但有差异,我更新它,我认为使用更新我可以做到...... 【参考方案1】:

你可以这样试试吗?

using System;
using System.Data;
using System.Data.OleDb; 
using System.Windows.Forms;

namespace WindowsApplication1

    public partial class Form1 : Form
    
        string connetionString;
        OleDbConnection connection;
        OleDbDataAdapter oledbAdapter;
        OleDbCommandBuilder oledbCmdBuilder;
        DataSet ds = new DataSet();
        DataSet changes;
        int i;
        string Sql;


        public Form1()
        
            InitializeComponent();
        

        private void button1_Click(object sender, EventArgs e)
        
            connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;";
            connection = new OleDbConnection(connetionString);
            Sql = "select * from tblUsers";
            try
            
                connection.Open();
                oledbAdapter = new OleDbDataAdapter(Sql, connection);
                oledbAdapter.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
            
            catch (Exception ex)
            
                MessageBox.Show (ex.ToString());
            
        

        private void button2_Click(object sender, EventArgs e)
        
            try
            
                oledbCmdBuilder = new OleDbCommandBuilder(oledbAdapter);
                changes = ds.GetChanges();
                if (changes != null)
                
                    oledbAdapter.Update(ds.Tables[0]);
                
                ds.AcceptChanges();
                MessageBox.Show("Save changes");
            
            catch (Exception ex)
            
                MessageBox.Show(ex.ToString());
            
        
    

【讨论】:

以上是关于使用 C# dataAdapter.Fill() 和 dataAdapter.Update() 将表的数据从一个数据库传输到另一个数据库的同一个表的主要内容,如果未能解决你的问题,请参考以下文章

向 dataAdapter.fill() 添加参数

如何提高 dataadapter.fill 的性能?

如何同时执行 DataAdapter.Fill()

在不使用 DataAdapter.Fill 的情况下更新数据表 2 次

DataAdapter.Fill(数据集)

DB2DataAdapter.Fill(dataset) 抛出错误“SQL0901N(原因“CPF4273”。)SQLSTATE=58004”