如何用一個資料庫的資料去更新另一個資料庫的內容

來源:互聯網
上載者:User

 

      首先套用我原先例子資料轉換模式,即把Access資料庫中的資料去更新SQL Server資料庫,其中用到資料表結構是一樣的(這兒只是為了簡化操作,並不是必要條件,其實只要兩個資料庫中資料表的欄位要進行匹配即可,資料表可以是不一樣的)。

首先,先說說資料表結構,表名為“EmployeeInfo”。

欄位名

類型

備忘

EmployeeID

Int

自增欄位

EmployeeName

Varchar(20)

Password

Varchar(20)

Desciption

Varchar(255)

      接著,在採用DBCommand+DataReader來進行資料庫資料的交換時,由於DataReader每次唯讀條資料,因此要立刻把當前讀到的資料去更新另一個資料庫。

具體代碼如下:

    private void btnExchange_Click(object sender, System.EventArgs e)
{
         OleDbConnection oleDBConn = new OleDbConnection();
        oleDBConn.ConnectionString = yourFirstDBConnection + Application.StartupPath + @"/" + ACCESS_FILENAME;
         try
         {
              oleDBConn.Open();//Open access db file
        }
         catch( Exception err )
       {
            MessageBox.Show( err.Message );
              return;
         }
         string strQuery = "SELECT * FROM EmployeeInfo";
        OleDbCommand myOleComm = new OleDbCommand( strQuery, oleDBConn );
        OleDbDataReader myOleReader = null;

        try
        {
           // Get data-reader from db command
            myOleReader = myOleComm.ExecuteReader( CommandBehavior.CloseConnection );
          UpdateWithReader( ref myOleReader );

            myOleReader.Close();
       }
       catch( Exception err )
      {
             MessageBox.Show( err.Message );
          oleDBConn.Close();
            return;
        }
    }

    private void UpdateWithReader( ref OleDbDataReader OleReader )

    {

        // Save data into sql-server using data set

        // Stored procedure named "UpdateEmployee"

        SqlConnection sqlConn = new SqlConnection();

        sqlConn.ConnectionString = yourSecondDBConnection;

        try

        {

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

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            return;

        }

        // Init update-command

        SqlCommand commUpdate = new SqlCommand( "UpdateEmployee" );

        commUpdate.Connection = sqlConn;

        commUpdate.CommandType = CommandType.StoredProcedure;

        // Add command's parameters

        commUpdate.Parameters.Add( "@EmployeeName",

            SqlDbType.VarChar, 20 );

        commUpdate.Parameters.Add( "@Password",

            SqlDbType.VarChar, 20 );

        commUpdate.Parameters.Add( "@Description",

            SqlDbType.VarChar, 255 );

        try

        {

            while( OleReader.Read() )

            {

                // Set parameters' value

                commUpdate.Parameters["@EmployeeName"].Value = OleReader["EmployeeName"];

                commUpdate.Parameters["@Password"].Value = OleReader["Password"];

                commUpdate.Parameters["@Description"].Value = OleReader["Description"];

               

                // Execute update-command

                try

                {

                    commUpdate.ExecuteNonQuery();

                }

                catch( SqlException err )

                {

                    MessageBox.Show( err.Message );

                }

            }

            commUpdate.Dispose();

            sqlConn.Close();

        }

        catch( Exception err )

        {

            MessageBox.Show( err.Message );

            sqlConn.Close();

            return;

        }

    }

以上匯入到第二資料庫的時候,程式是去執行一個預存程序,即我在資料庫預存程序中去判斷是否要添加

一條新的記錄還是在原有記錄上進行修改,這樣可以減少程式中查詢判斷,那麼如果要匯入的資料庫支援

預存程序的話,我建議用此方法來做。

預存程序如下:

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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.