2009-09-02 3 views
1

내가 ALBUMNAME 같은 테이블의 이름과 각 사진 앨범에 대한가장 좋은 방법은 SQL Server에 MS 액세스에서 테이블을 마이그레이션하고

TABLENAME = "여행" 필드를 하나 개의 테이블이있는 MS 액세스 데이터베이스를 통합하는 : picID는, 내가 SQL 서버로 마이그레이션하고

을 언급하고 내가이 정상화 문제를 해결하고 단지 ALBUMID 및 수 albumName로

  • 한 표를

    1. 하나 개의 테이블라는 앨범을 가지고 싶어 picID, albumID 등의 사진이 있습니다. .

  • 액세스에 여러 테이블을 복용하고 @rexem 더 부가 SQL 서버에 하나 개의 테이블에

    +0

    어떤 앨범 ID 열이 될까요? – shahkalpesh

    +0

    int - autoincrement – leora

    답변

    1

    감사 -
    또는이 링크가 도움이된다면

    참조 MS-액세스 내부의 테이블을 얻기 위해 코드를 작성해야합니다. . 아래 코드를 사용하여 작동 시켰습니다. .

    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

    이동이 프로세스를 자동화하는 어쨌든, 당신은 테이블 이름 목록 (예 : 앨범)에서 얻을 수 있습니다 액세스 (SQL 서버 DB의 앨범 테이블에 연결된 테이블을 생성하여) 당신은 앨범 테이블에 레코드를 삽입하려면이 옵션을 사용할 수있는 다음과 같은 쿼리

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

    를 사용하여.

    편집 : Access 2007을 사용 중입니다. & "시스템 개체 표시"옵션을 볼 수 없습니다. 팁에 대한 http://www.microsoft.com/technet/scriptcenter/resources/qanda/jun06/hey0608.mspx

    +0

    이 오류가 발생합니다. . 레코드를 읽을 수 없습니다. 'msysobjects'에 대한 읽기 권한이 없습니다. – leora

    +0

    @oo : DB 내의 다른 테이블에서 SELECT를 수행 할 수 있습니까? – shahkalpesh

    0

    먼저 SQL Server로 마이그레이션 한 다음 변환을 수행하면됩니다. Access 및 SQL Server와 논쟁하는 것보다 쉽게 ​​만들 수 있습니다.

    다음은 SQL Server Access 마이그레이션 도구입니다.

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

    +0

    나는 동의하지 않을 것이다. Access에서 새 테이블을 만들고 Access에서 모든 레코드를 추가 한 다음 그 단일 테이블을 업 사이징하는 것이 더 쉬울 것이라고 생각합니다. 코드가 필요하지 않습니다. –

    +0

    그것은 확실히 작동 할 것입니다. :) – klabranche

    관련 문제