将数据从Excel工作表插入SQL CE 3.5数据库 [英] Insert data from excel sheet to SQL CE 3.5 database

查看:68
本文介绍了将数据从Excel工作表插入SQL CE 3.5数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要一种简单有条理的方法将我的数据从多个Excel工作表迁移到一个单独的SQL compact 3.5数据库文件

我做的工作就是尝试将excel表加载到一个datagridview然后将它保存到sql CE数据库,但它总是给出错误并重复数据库中的单元格



编辑:

这个是根据Maciej Los的工作代码从excel插入数据表到SQL CE 3.5数据库 [ ^ ]回答指导



I want a simple and organized way to migrate my data from multiple excel sheets to one single SQL compact 3.5 database file
What I did to work this thing out was trying to load the excel sheet into a datagridview and then save it to the sql CE database, but it always gives error and duplicates cells in the database


This is the working code as per Maciej Los Insert data from excel sheet to SQL CE 3.5 database[^] answer guidance

try
            {
                String sheetN = "Sheet1";
                String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                                "E:\\test.xls" +
                                ";Extended Properties='Excel 8.0;HDR=YES;';";

                OleDbConnection EXcon = new OleDbConnection(constr);
                OleDbCommand oconn = new OleDbCommand("Select * From [" + sheetN + "$]", EXcon);
                EXcon.Open();

                OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
                DataTable data = new DataTable();
                sda.Fill(data);
                dataGridView1.DataSource = data;

                if (data.Rows.Count >= 1)
                {
                    MessageBox.Show("We have Rows");
                }


                string conString = (@"Data Source=E:\\test.sdf;Persist Security Info=True;");
                
                try
                {
                    using (SqlCeConnection con = new SqlCeConnection(conString))
                    {
                        con.Open();


                        SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions();
                        using (SqlCeBulkCopy bc = new SqlCeBulkCopy(con, options))
                        {
                            bc.DestinationTableName = "Niaba";
                            bc.WriteToServer(data);
                        }
                        con.Close();
                    }
                    MessageBox.Show("All data copied to database successfully");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

推荐答案

,EXcon);
EXcon.Open();

OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
DataTable data = new DataTable();
sda.Fill(data);
dataGridView1.DataSource = data;

if ( data.Rows.Count > = 1
{
MessageBox.Show ( 我们有行);
}


string conString =( @ 数据源= E:\\test.sdf;持久安全信息=真;);

尝试
{
使用(SqlCeConnection con = new SqlCeConnection(conString))
{
con.Open();


SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions();
使用(SqlCeBulkCopy bc = new SqlCeBulkCopy(con,options))
{
bc.DestinationTableName = Niaba;
bc.WriteToServer(data);
}
con.Close();
}
MessageBox.Show( 所有数据成功复制到数据库) ;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
catch (Exception ex)
{
MessageBox.Show( ex.Message);
}
", EXcon); EXcon.Open(); OleDbDataAdapter sda = new OleDbDataAdapter(oconn); DataTable data = new DataTable(); sda.Fill(data); dataGridView1.DataSource = data; if (data.Rows.Count >= 1) { MessageBox.Show("We have Rows"); } string conString = (@"Data Source=E:\\test.sdf;Persist Security Info=True;"); try { using (SqlCeConnection con = new SqlCeConnection(conString)) { con.Open(); SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions(); using (SqlCeBulkCopy bc = new SqlCeBulkCopy(con, options)) { bc.DestinationTableName = "Niaba"; bc.WriteToServer(data); } con.Close(); } MessageBox.Show("All data copied to database successfully"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } catch (Exception ex) { MessageBox.Show(ex.Message); }


我建​​议使用 SqlCeBulkCopy类 [ ^ ](来自codeplex),它提供了几种复制数据的选项数据库以安全的方式。



如何使用?

1)下载并安装此nuget数据包 [ ^ ],

2)创建新项目,

3)创建新的 OleDbConnection [ ^ ]将数据从Excel加载到 DataTable [ ^ ]对象(使用 OleDbCommand [ ^ ] + < a href =https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader%28v=vs.110%29.aspx> OleDbDataReader [ ^ ]),

4)关闭OleDbConnection(不要删除 DataTable 对象,你将在下一步使用它!),

5)创建新的 SqlCeConnection [ ^ ],
)创建新的 SqlCeBulkCopy 类并使用 WriteToServer 方法。传递 DataTable 对象作为输入参数,

7)关闭 SqlCeConnection



就是这样!





欲了解更多详情,请下载文档 [ ^ ]。
I'd suggest to use SqlCeBulkCopy class[^] (from codeplex), which provides several options to copy data between databases in a safe way.

How to use it?
1) download and install this nuget packet[^],
2) create new project,
3) create new OleDbConnection[^] to load data from Excel into DataTable[^] object (using OleDbCommand[^] + OleDbDataReader[^]),
4) close OleDbConnection (do NOT delete DataTable object, you'll use it in the next step!),
5) create new SqlCeConnection[^],
6) create new SqlCeBulkCopy class and use WriteToServer method. Pass DataTable object as an input parameter,
7) close SqlCeConnection.

That's all!


For further details, please download the documentation[^].


这篇关于将数据从Excel工作表插入SQL CE 3.5数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆