1

同じスキーマ (同じテーブル) を持つ 2 つのデータベース (SQlserver と MS Access) があります。SQL サーバー データベースにはデータがありますが、Access にはデータがありません (空のデータベース)。

私の目標: ユーザーが ClientId を入力して挿入ボタンをクリックすると、SQL Server データベースのすべてのテーブルからその単一のレコードを取得し、MS Access データベースのテーブルに挿入する必要があります。

達成: クライアント ID を使用して SQL Server データベースのすべてのテーブルから取得し、データをデータセットに保存しました。

テーブル配列があり、配列内のすべてのテーブルをループして、上記のデータセットから Ms Access に動的にデータを挿入しようとしています。

loop ですべてのテーブルを動的に Access に挿入する方法を提案できますか。テーブルごとにinsert文を書くことができません。パラメータを渡すために、すべてのテーブルに汎用的なものが必要です。一括挿入ではなく、単一のレコードを複数のテーブルにプッシュします。

-------これは私のコードです--------------------------------------- ----------------

private void InsertMsiClientIntoTest(string ClientId)
        {
            SqlConnection sqlConnection = null;
            SqlDataAdapter sqlDataAdapter = null;
            DataSet sqlserverDataset = new DataSet();
            sqlserverDataset.Tables.Add();
            sqlConnection = new SqlConnection();
            sqlConnection = new SqlConnection("Data Source=THINK;Initial Catalog=" + dbName + ";Integrated Security=True;");
            sqlConnection.Open();
            sqlDataAdapter = new SqlDataAdapter(ClientSQL.PopulateTables, sqlConnection);
            sqlDataAdapter.SelectCommand.Parameters.AddWithValue("@ClientId", cmbId.Text);
           sqlDataAdapter.Fill(sqlserverDataset);
           GetDataFromTablesForID(sqlserverDataset); 
           InsertAllTableDataIntoAccess(sqlserverDataset,tableArray);
        }


        private DataSet GetDataFromTablesForID(DataSet dsTablesList)
        {
            SqlConnection sqlConnection = null;
            SqlDataAdapter sqlDataAdapter = null;
            string tableName = string.Empty;
            string QueryText = string.Empty;
            int i =0;
            tableArray = new string[dsTablesList.Tables[0].Rows.Count];
            DataSet sqlserverDataset = new DataSet();
            sqlserverDataset.Tables.Add();
            sqlConnection = new SqlConnection();
            sqlConnection = new SqlConnection("Data Source=THINK;Initial Catalog=" + dbName + ";Integrated Security=True;");
            sqlConnection.Open();
            foreach (DataRow itemRow in dsTablesList.Tables[0].Rows)
            {                
                 tableArray[i] = itemRow[0].ToString();
                 i++;
            }
            foreach (string tableItem in tableArray)
            {
                tableName = tableItem;

                    QueryText = "select x.*  from" + " " + tableName + " " +
                    "x inner join ClientMajor ci on ci.ClientId = x.ClientId where ci.MajorClientId =@ClientId";
                }
                sqlDataAdapter = new SqlDataAdapter(QueryText, sqlConnection);
                sqlDataAdapter.SelectCommand.Parameters.AddWithValue("@ClientId", cmbExceedId.Text);
                sqlDataAdapter.Fill(sqlserverDataset);
            }

            return sqlserverDataset;

        }

        private void InsertAllTableDataIntoAccess(DataSet Inputset, string[] tableArray)
        {
            string connectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["mdb"].ToString();
            OleDbConnection oledbConnection = null;
            OleDbDataAdapter oledbDataAdapter = null;
            DataSet resultSet = new DataSet();
            oledbConnection = new OleDbConnection(connectionstring);
            oledbConnection.Open();
            foreach (string tableItem in tableArray)
            {
//?????????  I NEED THE FOLLOWING CODE......////////////???????           
                oledbDataAdapter.InsertCommand.CommandText="insert into "
                oledbDataAdapter.Fill(resultSet.Tables[0]);
            }
        }

前もって感謝します...

4

1 に答える 1

0

それを行う最善の方法は、最初にSQLサーバーにデータを挿入し、次にssisパッケージを使用してSQLサーバーからデータをエクスポートし、データベースにアクセスします、データ送信先としての ms アクセス )

于 2012-07-29T16:15:49.947 に答える