将数据从Access复制到现有SQL Server表

时间:2013-04-10 12:57:42

标签: c# winforms

此代码从访问SQL Server表复制数据。 但是这段代码存在一些问题。

  1. 此代码无法从访问具有数据的SQL Server表中复制数据。
  2. 我的SQL服务器表有一些数据,我想从访问SQL服务器表中的现有数据下添加数据。

    如何将数据添加到现有表格?

    1. 无法从2007年或2010年访问中读取数据。
    2. 如何从2007/2010访问中读取数据

      OpenFileDialog openfiledialog1 = new OpenFileDialog();
               openfiledialog1.Title = "select access file";
      
                  openfiledialog1.Filter = "Access 2003 (*.mdb)|*.mdb|Access 2007|*.accdb";
                  if (openfiledialog1.ShowDialog() == DialogResult.OK)
                  {
      
                      string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openfiledialog1.FileName;
                      const string connectionStringDest = @"server=ahmad-pc\anfd;database = phonebook;Integrated Security = true";
                      using (var sourceConnection = new OleDbConnection(connectionString))
                      {
                          sourceConnection.Open();
      
                          var commandSourceData = new OleDbCommand("SELECT * from numberperson", sourceConnection);
                          var reader = commandSourceData.ExecuteReader();
      
                          using (var destinationConnection = new SqlConnection(connectionStringDest))
                          {
                              destinationConnection.Open();
      
                              using (var bulkCopy = new SqlBulkCopy(destinationConnection))
                              {
      
      
                                  bulkCopy.ColumnMappings.Add("name", "nameperson"); //THIS A MAPPING REPLACE IT WITH YOUR NEED
                                  bulkCopy.ColumnMappings.Add("family", "family1");
                                  bulkCopy.DestinationTableName = "profile2";
      
                                  try
                                  {
                                      bulkCopy.WriteToServer(reader);
                                  }
                                  catch (Exception ex)
                                  {
                                      Console.WriteLine(ex.Message);
                                  }
                                  finally
                                  {
                                      reader.Close();
                                  }
                              }
                          }
                          MessageBox.Show("success");
                      }
      
                  }
      

1 个答案:

答案 0 :(得分:0)

SQLBulkCopy只进行批量插入,因此不应修改任何现有数据。

对于MS Access> 2003你需要使用Microsoft ACE而不是JET