简体   繁体   English

从SQL Server动态地将单个记录插入MS访问

[英]Dynamically Insert single record into MS access from SQL server

I have two databases(SQlserver and MS Access) with same schemas (same tables). 我有两个具有相同模式(相同表)的数据库(SQlserver和MS Access)。 SQL server database has data but Access has no data (blank database). SQL Server数据库有数据,但是Access没有数据(空白数据库)。

My goal : when user enters a ClientId and click insert button then I need to retrive that single record from all tables in sql server database and insert into tables in MS Access Database. 我的目标:当用户输入ClientId并单击“插入”按钮时,我需要从sql server数据库中的所有表中检索该单个记录,并将其插入MS Access数据库中的表中。

Achieved: i retrived from all tables in sql server databases with client id and stored the data in Dataset. 实现:我从带有客户端ID的sql server数据库中的所有表中检索数据,并将数据存储在Dataset中。

i have table array and i am looping thru all tables in array and trying to insert data from above dataset into Ms Access dynamically. 我有表数组,我遍历数组中的所有表,并尝试将上述数据集中的数据动态插入Ms Access。

Can you suggest how insert into Access for all tables dynamically in loop . 您能建议如何动态地将所有表动态插入Access中吗? i cannot wrie insert statement for each table. 我不能为每个表插入语句。 i need one which is generic for every table so that i will pass parametrs. 我需要每个表都通用的一个,这样我才能通过参数。 Its not a bulk insert, its single record push into multiple tables. 它不是批量插入,而是将单个记录推送到多个表中。

-------This is My code------------------------------------------------------- -------这是我的代码--------------------------------------- ----------------

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]);
            }
        }

Thanks in Advance... 提前致谢...

最好的方法是:首先,在sql服务器上插入数据,其次,使用ssis包从sql服务器导出数据以访问数据库SSIS在您这种情况下很有用(以sql server作为数据源创建数据流,您的查询和ms访问作为数据目标)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM