2009-09-02 42 views
1

我有了一个表中的每个相册与表作为ALBUMNAME名最好的方式从MS Access表迁移到SQL Server和巩固

的tablename =“跳闸” 字段MS Access数据库:picID,评论

我正在迁移到SQL服务器,我想解决这个问题正常化,只是有

  1. 一台名为相册ALBUMID和ALBUMNAME
  2. 一个表用picID,albumID等称呼图片。 。

反正是有自动取多个表的访问和移动到一个表中的SQL Server

+0

albumID列是什么类型? – shahkalpesh 2009-09-02 02:42:35

+0

int - 自动增量 – leora 2009-09-02 02:47:47

回答

1

感谢您的提示。 。我使用下面的代码得到它的工作。 。

public void InsertIntoSQL() 
    { 
     string accessDataSource = ConfigurationSettings.AppSettings["photosDB"]; 
     OleDbConnection msAccessConnection = new OleDbConnection(accessDataSource); 
     msAccessConnection.Open(); 

     string SQLServerDataSource = ConfigurationManager.ConnectionStrings["kantro_49478ConnectionString"].ConnectionString; 
     var sqlConnection = new SqlConnection(SQLServerDataSource); 
     sqlConnection.Open(); 


     DataTable table = msAccessConnection.GetSchema("tables"); 

     foreach (DataRow row in table.Rows) 
     { 
      string albumName = row[2].ToString(); 
      if (!string.IsNullOrEmpty(albumName) && !albumName.StartsWith("~")) 
      { 
       string sql = "Select * from " + albumName; 
       OleDbDataAdapter objCommand1 = new OleDbDataAdapter(sql, msAccessConnection); 
       DataSet ds1 = new DataSet(); 
       objCommand1.Fill(ds1); 

       SqlDataAdapter objCommand = new SqlDataAdapter("Select album_id from PhotoAlbums where album_name = '" + albumName + "'", sqlConnection); 
       DataSet ds = new DataSet(); 
       objCommand.Fill(ds); 
       string albumID = ds.Tables[0].Rows[0][0].ToString(); 

       foreach (DataRow dRow in ds1.Tables[0].Rows) 
       { 
        string sql1 = "INSERT INTO Pictures VALUES (" + dRow[0].ToString() + ", " + albumID + ")"; 

        SqlCommand myCommand = new SqlCommand(sql1); 
        myCommand.Connection = sqlConnection; 
        myCommand.ExecuteNonQuery(); 
       } 
      } 
     } 
     msAccessConnection.Close(); 
    } 
1

增加进一步@rexem这个过程中,你可以得到表名的列表(即相册)访问,使用下面的查询

SELECT ID, Name 
FROM msysobjects 
WHERE type = 1 AND flags=0 

你可以用它来记录插入到相册表(通过创建链接表到SQL Server数据库的相册表)。

编辑:我使用Access 2007 &看不到“显示系统对象”选项。
或者,你将不得不写代码进去MS-Access中的表

看看这个链接帮助 - http://www.microsoft.com/technet/scriptcenter/resources/qanda/jun06/hey0608.mspx

+0

我收到此错误。 。 无法读取记录; 'msysobjects'没有读取权限。 – leora 2009-09-02 02:49:17

+0

@oo:你能够在数据库中的其他表上做SELECT吗? – shahkalpesh 2009-09-02 03:01:17

0

您可以先将其迁移到SQL Server,然后再进行转换。可能会比试图与Access和SQL Server进行争吵更容易。

这里是一个SQL Server访问迁移工具。

http://www.microsoft.com/sqlserver/2005/en/us/migration-access.aspx

+0

我不同意。我认为在Access中创建一个新表更容易,并在Access中追加所有记录,然后升级该单个表。没有必要的代码。 – 2009-09-03 01:53:16

+0

这肯定会奏效。 :) – klabranche 2009-09-03 02:17:47