문제

기본적으로 SQL 코드를 액세스로 가져 오는 방법을 알아야합니다. 나는 한 가지 방법으로 시도했지만 한 번에 하나의 테이블과 하나의 값을 수행 해야하는 시간이 많이 걸립니다.

누구든지 도울 수 있습니까?

도움이 되었습니까?

해결책

글쎄, 며칠 전에 나는 액세스 데이터베이스에서 SQL로 데이터를 전환해야했습니다 (당신이하고있는 일의 반대로). 액세스 데이터베이스의 데이터를 읽고 SQL에 삽입하는 간단한 스크립트를 작성하는 것이 간단하다는 것을 알았습니다.

나는 당신이해야 할 일을하는 것이 다르다고 생각합니다.

도움이 될지 모르겠지만 코드를 게시합니다 (간단한 C# 함수). 연결을 변경하면 작동합니다. 물론 나는 3 개의 필드 만 가지고 있었기 때문에 하드 코딩했습니다. DB 스키마에 대해서도 동일한 작업을 수행 할 수 있습니다.

protected void btnProcess_Click(object sender, EventArgs e)
{
    //Open the connections to the access and SQL databases
    string sqlDBCnn = @"Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDBFileName=|DataDirectory|\mydb.mdf;user instance=true";
    string accessDBCnn = @"Provider=Microsoft.Jet.OleDB.4.0;Data Source=C:\mydb.mdb";

    OleDbConnection cnnAcc = new OleDbConnection(accessDBCnn);
    cnnAcc.Open();

    SqlConnection cnnSql = new SqlConnection(sqlDBCnn);
    cnnSql.Open();

    SqlCommand cmSql = new SqlCommand("DELETE tablename", cnnSql);
    cmSql.ExecuteNonQuery();

    //Retrieve the data from the Access Database
    OleDbCommand cmdAcc = new OleDbCommand("SELECT * FROM tablename", cnnAcc);
    OleDbDataReader drAcc = cmdAcc.ExecuteReader();

    using (drAcc)
    {
        if (drAcc.HasRows)
        {
            //Loop through the access database records and add them to the database
            while (drAcc.Read())
            {
                SqlCommand cmdSql = new SqlCommand("INSERT INTO tablename(Category, Head, Val) VALUES(@cat,@head,@val)",cnnSql);

                SqlParameter parCat = new SqlParameter("cat",System.Data.SqlDbType.VarChar,150);
                SqlParameter parHead = new SqlParameter("head",System.Data.SqlDbType.VarChar,150);
                SqlParameter parVal = new SqlParameter("val",System.Data.SqlDbType.VarChar);
                parCat.Value = drAcc["Category"].ToString();
                parHead.Value = drAcc["Head"].ToString();
                parVal.Value = drAcc["Val"].ToString();
                cmdSql.Parameters.Add(parCat);
                cmdSql.Parameters.Add(parHead);
                cmdSql.Parameters.Add(parVal);

                cmdSql.ExecuteNonQuery();
            }
        }
    }

    lblMsg.Text = "<p /> All Done Kapitone!";

}

다른 팁

SQL 코드 대신 데이터를 가져 오려는 경우 (Duffymo의 응답 참조) 두 가지 방법이 있습니다.

하나는 데이터가있는 곳으로 가서 .csv 파일을 덤프하고 Duffymo가 응답 한 것처럼 가져 오는 것입니다.

다른 하나는 액세스 데이터베이스에서 소스 데이터베이스의 테이블로 테이블 링크를 만드는 것입니다. 두 데이터베이스가 이런 식으로 서로 대화하는 경우 액세스 데이터베이스에있는 것처럼 원격 테이블의 데이터를 사용할 수 있습니다.

SQL 코드? 또는 데이터? "하나의 테이블과 하나의 가치"는 그것이 후자라고 생각하게 만듭니다. 그렇다면 데이터를 .CSV 파일에 버리고 액세스 테이블로 가져 오는 것이 좋습니다.

또는 Microsoft의 DTS와 같은 도구를 사용하여 소스간에 데이터를 매핑하고 이동할 수 있습니다. 그것은 최선의 아이디어 일 것입니다.

SQL에서 액세스하기 위해 구조와 데이터를 "가져 오기"에 대해 이야기하고 있다고 생각합니다. Access는 SQL 데이터베이스에서 직접 생성 할 수있는 표준 TSQL 스크립트를 허용하지 않습니다. 같은 상용 제품이 있습니다 EMS 그것은 당신을 위해 일을 할 수 있습니다. EMS에는 액세스를 포함하여 SQL 데이터를 다른 형식으로 가져갈 수있는 데이터 수출자 모듈이 있습니다.

또 다른 방법은 액세스 파일을 열고 기본 VBA 코드를 작성하여 DOCMD.TRANSFERDATABASE 메소드를 활용하여 다른 데이터베이스의 테이블을 링크하거나 복사 할 수 있습니다.

이러한 방법으로 기본 키 및 관계를 포함하여 '깨끗한'데이터베이스 모델을 전송할 수 있는지 잊어 버렸습니다. 시도해 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top