【问题标题】:How to import data from MS Access to Sql Server by coding [closed]如何通过编码将数据从 MS Access 导入 Sql Server [关闭]
【发布时间】:2017-12-01 11:03:42
【问题描述】:

我需要通过代码将Access数据库导入Sql Server。我多年来用 C# 制作的软件已集成到 Access 数据库中。从现在开始,我们正在迁移到 Sql Server,目的是升级到下一个版本,系统将仅适用于 Sql Server。我想首先创建一个具有相同名称的表和列的Sql数据库,软件读取Access表并将数据保存在Sql数据库中。有没有其他更实用的方式通过编码来做到这一点?

我一直在搜索,发现只有工具准备好了,但没有通过编码。

【问题讨论】:

  • 如果它是一次性任务,为什么要在代码中执行此操作? SSMA/SQL Server 迁移助手可以做到这一点,并为您提供一个良好的起点。
  • 为什么在这种情况下我必须逐个访问每个用户的计算机并安装 SqlServer 才能进行迁移。其目的是通过该软件,在Visual Studio创建的表单中,在为新版本更新软件时,用户自己可以通过单击Ok按钮来迁移到新数据库。

标签: c# sql-server winforms tsql ms-access


【解决方案1】:

好的,假设您的访问数据库表有 3 列,第一列是整数类型,第二列是字符串(varchar),第三列是 DateTime(日期)。

所以这是您将数据从 Access 传递到 Sql Server 时必须执行的代码:

DataTable table = new DataTable();
// get data from access
using(OleDbConnection conn = new OleDbConnection("connString1"))
{
     using(OleDbDataAdapter da = new OleDbDataAdapter(@"SELECT * FROM MyTable", conn))
           da.Fill(table);
}

//insert data into Sql server:
using(SqlConnection conn = new SqlConnection("connString2"))
{
     using(SqlCommand cmd = new SqlCommand())
     {
            cmd.CommandText = @"INSERT INTO MyTable VALUES (@p1, @p2, @p3)";
             cmd.Connection = conn;
             cmd.Parameters.Add("@p1", SqlDbType.Int);  
             cmd.Parameters.Add("@p2", SqlDbType.CarChar, 50);
             cmd.Parameters.Add("@p3", SqlDbType.DateTime);
             conn.Open();

             for(int i = 0; i < table.Rows.Count; i++)
             {
                    cmd.Parameters["@p1"].Value = Convert.ToInt32(table.Rows[i][0]);
                    cmd.Parameters["@p2"].Value = table.Rows[i][1].ToString();
                    cmd.Parameters["@p3"].Value = Convert.ToDateTime(table.Rows[i][2]);
                    try
                    {
                          cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                           MessageBox.Show(ex.Message);
                           break;
                    }
             }
     }
}

【讨论】:

  • 这正是我想做的。那么这是否意味着没有更简单的方法可以做到这一点?
  • 这是通过代码实现的最简单方法。
  • @vijayvikcs Tkx!
猜你喜欢
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多