繁体   English   中英

如何使用C#将数据表值添加到ms访问表

[英]how to add data table values to a ms access table using c#

我在SQL Server中有10个表,我想将这些表值导出到也包含10个表的ms Access数据库中。 因此,有什么方法可以使用C#代码导出数据。 我不想为每个表编写大量代码以从特定表中获取数据,然后一行一行地插入到相应的访问表中,是否有任何我可以使用的快捷方式,请告诉我。

我认为这段代码可以帮助您。

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"Database.accdb\";Persist Security Info=False;");

                    //command to insert each ASIN
                    OleDbCommand cmd = new OleDbCommand();

                    //command to update each column (ASIN, Retail... from CSV)
                    OleDbCommand cmd1 = new OleDbCommand();

                    //load csv data to dtCSV datatabe
                    DataTable dtCSV = new DataTable();

                    dtCSV = ds.Tables[0];

                    // Now we will collect data from data table and insert it into database one by one
                    // Initially there will be no data in database so we will insert data in first two columns
                    // and after that we will update data in same row for remaining columns
                    // The logic is simple. 'i' represents rows while 'j' represents columns

                    cmd.Connection = myConnection;
                    cmd.CommandType = CommandType.Text;
                    cmd1.Connection = myConnection;
                    cmd1.CommandType = CommandType.Text;

                    myConnection.Open();

                    for (int i = 0; i <= dtCSV.Rows.Count - 1; i++)
                    {
                        cmd.CommandText = "INSERT INTO " + lblTable.Text + "(ID, " + dtCSV.Columns[0].ColumnName.Trim() + ") VALUES (" + (i + 1) + ",'" + dtCSV.Rows[i].ItemArray.GetValue(0) + "')";

                        cmd.ExecuteNonQuery();

                        for (int j = 1; j <= dtCSV.Columns.Count - 1; j++)
                        {
                            cmd1.CommandText = "UPDATE " + lblTable.Text + " SET [" + dtCSV.Columns[j].ColumnName.Trim() + "] = '" + dtCSV.Rows[i].ItemArray.GetValue(j) + "' WHERE ID = " + (i + 1);

                            cmd1.ExecuteNonQuery();
                        }
                    }

                    myConnection.Close();

如果这是一次性操作,则应使用SQL Server的数据导出功能或Access的导入功能来执行此操作。 对于不想编写代码的最终用户来说,它们将足够简单。 您只需在其中选择数据库,要导出的表以及目标数据库,然后单击按钮即可导出所有内容。

首先,请确保访问表列具有相同的列名和相似的类型。 然后,您可以使用此功能,我认为它非常快速且美观。

    public void AccessBulkCopy(DataTable table)
    {
        foreach (DataRow r in table.Rows)
            r.SetAdded();

var myAdapter = new OleDbDataAdapter("SELECT * FROM " + table.TableName, _myAccessConn);

        var cbr = new OleDbCommandBuilder(myAdapter);
        cbr.QuotePrefix = "[";
        cbr.QuoteSuffix = "]";
        cbr.GetInsertCommand(true);

        myAdapter.Update(table);
    }

使用此代码

好吧,我得到了答案。 我用于循环生成查询字符串,如下所示。

    public void MainAccess(int _i)
    {
        DataTable dt = ds.Tables[_i];
        string sql = "";

        for (int i = 0; i < dt.Rows.Count; i++)
        {
        sql = sql + "INSERT INTO "+ _tableString[_i] + " values('";
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            sql += dt.Rows[i][j].ToString().Trim();
            if (j != dt.Columns.Count - 1)
            {
                sql += "','";
            }
            else
            {
                sql += "')";
            }
        }
        ExecuteQuery(sql);
        sql = null;
    }
}

暂无
暂无

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

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