如何用一个数据库的数据去更新另一个数据库的内容

数据库之间数据交换,是比较费时,也是比较麻烦的,人们在做类似操作的时候,不希望一条一条的去写SQL语句。那么我最近作了一个DEMO,通过使用DataAdapter+Dataset可以方便的完成数据库之间的更新操作。

 

我的例子是把Access数据库中的数据去更新SQL Server数据库,其中用到数据表的结构一样(这儿只是为了简化操作,并不是必要条件,其实只要两个数据库中数据表的字段要进行匹配即可,数据表可以是不一样的)。

 

首先,先说说数据表结构,表名为“EmployeeInfo”。

字段名

类型

备注

EmployeeID

Int

自增字段

EmployeeName

Varchar(20)

 

Password

Varchar(20)

 

Desciption

Varchar(255)

 

 

接着,要先从Access数据库中读取数据,代码如下:

    private const string TABLE_NAME = "EmployeeInfo";

    private DataSet dsData = null;

 

    private void btnLoad_Click(object sender, System.EventArgs e)

    {

        // Load data from access db file

        OleDbConnection oleDBConn = new OleDbConnection();

        oleDBConn.ConnectionString = yourDBConnectionString

 

        try

        {

            oleDBConn.Open();//Open access db file

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            return;

        }

 

        string strQuery = "SELECT * FROM EmployeeInfo";

        OleDbDataAdapter myDAdapter = new OleDbDataAdapter( strQuery, oleDBConn );

 

        DataSet dsSource = new DataSet();

        try

        {

            // Get data from access db file

            myDAdapter.Fill( dsSource, TABLE_NAME );

 

            // Release ado.net resource

            myDAdapter.Dispose();

            oleDBConn.Close();

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            oleDBConn.Close();

            return;

        }

 

        // Process data set

        ExchangeDS( out dsData, ref dsSource );

    }

 

    private void ExchangeDS( out DataSet dsDest, ref DataSet dsSource )

    {

        // Create new data set

        dsDest = new DataSet( );

        DataTable dtDest = new DataTable( TABLE_NAME );

        dsDest.Tables.Add( dtDest );

 

        // Add data column

        dsDest.Tables[TABLE_NAME].Columns.Add(

            new DataColumn( "EmployeeID", typeof(int) )  );

        dsDest.Tables[TABLE_NAME].Columns.Add(

            new DataColumn( "EmployeeName", typeof(string) )  );

        dsDest.Tables[TABLE_NAME].Columns.Add(

            new DataColumn( "Password", typeof(string) )  );

        dsDest.Tables[TABLE_NAME].Columns.Add(

            new DataColumn( "Description", typeof(string) )  );

 

        // Add data row from source data set

        while( dsSource.Tables[TABLE_NAME].Rows.Count > 0 )

        {

            DataRow dr = dsSource.Tables[TABLE_NAME].Rows[0];

            dsDest.Tables[TABLE_NAME].Rows.Add( dr.ItemArray );

            dsSource.Tables[TABLE_NAME].Rows.Remove( dr );

        }

    }

 

       这里需要注意的是ExchangeDS”函数,如果DataSet没有发生任何变化,那么用DataAdapter是无法更新数据库的,那么这个函数的目的造成DataSet中的记录发生变化,本来想用DataSet.Merge方法,发现也无法用DataAdapter来无法更新数据库的,因此只能一条记录一条记录进行复制了。

 

下面就是如何用DataSet来更新SQL Server数据库了。我这里调用的是一个存储过程,有存储过程去判断到底是插入数据,还是在原有记录上去更新,存储过程如下:

CREATE  PROCEDURE UpdateEmployee

       @EmployeeName varchar(20),

       @Password varchar(20),

       @Description varchar(255)

AS

 

IF EXISTS( SELECT EmployeeID FROM EmployeeInfo WHERE EmployeeName = @EmployeeName )

BEGIN

       -- Update the previous record in EmployeeRegionInfo table

       UPDATE EmployeeInfo SET Password = @Password, Description = @Description

       WHERE EmployeeName = @EmployeeName

END

ELSE

BEGIN

       -- Insert a new record in EmployeeRegionInfo table

       INSERT INTO EmployeeInfo

       ( EmployeeName, Password, Description )

       VALUES ( @EmployeeName, @Password, @Description )

END

GO

 

实际更新操作的代码如下:

    private void btnSave_Click(object sender, System.EventArgs e)

    {

        // Save data into sql-server using data set

        // Stored procedure named "UpdateEmployee"

        SqlConnection sqlConn = new SqlConnection();

        sqlConn.ConnectionString = yourDBConnectionString

 

        try

        {

            sqlConn.Open();//Connect to sql server

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            return;

        }

 

        SqlDataAdapter myDAdapter = new SqlDataAdapter();

        myDAdapter.InsertCommand = new SqlCommand( "UpdateEmployee" );

        myDAdapter.InsertCommand.Connection = sqlConn;

        myDAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;

 

        myDAdapter.InsertCommand.Parameters.Add( "@EmployeeName",

            SqlDbType.VarChar, 20, "EmployeeName" );

        myDAdapter.InsertCommand.Parameters.Add( "@Password",

            SqlDbType.VarChar, 20, "Password" );

        myDAdapter.InsertCommand.Parameters.Add( "@Description",

            SqlDbType.VarChar, 255, "Description" );

 

        try

        {

            myDAdapter.Update( dsData, TABLE_NAME );

            myDAdapter.Dispose();

            sqlConn.Close();

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            sqlConn.Close();

            return;

        }

    }

 

你可能感兴趣的:(如何用一个数据库的数据去更新另一个数据库的内容)