我正在准备将数据从excel表导入到sql server 2005.当我从excel表导入数据到数据库时,我几乎没有要求。我搜索了很多但是我找不到答案而且我得到了混淆了,所以想到我在这里问我的查询.excel表格就是这样的。
第一行包含标题“交易”
第二行包含SubHeading“Date”
从第三行开始,数据以列名开头,后跟resp.rows中的数据。
CustId CustName OUtlet TerminalNum Date DateTime Amount<br/>
1 Nazima SS 770012234 1/22/2011 1/22/2011 12:34:45 1500.50<br/>
这是excel表格中数据的方式。
我试图上传图片但发布问题时显示问题。我输入了。
我的要求是,当我将数据从excel表导入数据库时,我必须忽略前两行,并且必须从第三行导入数据,我必须导入totalamount(62854)和总行数(11)在一个表和其他表中的数据。
我可以使用oledbcommand导入数据:
oledbcommand cmd=new oledbcommand("select * from [sheet1$]",con);
和
oledbcomaand cmd=new oledbcommand("select * from [sheet1$A3:H13]",con);
这两个语句正在运行,但我不希望这样,因为最终用户可以从任何单元格输入数据,所以我想动态指定工作表和范围。在最终用户开始输入数据的任何单元格中,数据沿着总数和行数应该导入到数据库中的reso.tables而没有任何问题。
而且我想知道当最终用户在excel表中输入新行而不插入表中已存在的前一行时,如何在表中插入新行。
接下来我想知道哪个是从excel导入数据到数据库的最佳方法。通过excel互操作或通过Oledb.I尝试使用导入/导出向导,SSIS,他们正在工作,但我必须这样做编程。
给我一些指导,我如何才能执行这些过程。
希望你理解我的怀疑。
答案 0 :(得分:0)
使用Interop
会有一种简单而且更好的方法。但是,我从未使用过它,因此不知道如何使用它。
My requirement is that when i import data from excel sheet to database i have to ignore the first two rows and have to import data from third row and i have to import totalamount(62854) and total no.of rows(11) in one table and data in other table.
DataSet
OleDbDataAdapter
DataSet
,即执行所需的操作。DataSet
的数据插入到您想要的Database
修改强>
示例代码:
public static void ExcelOperations(string ConnectionString)
{
try
{
DataTable Sheets = new DataTable();
using (OleDbConnection connection = new OleDbConnection(ConnectionString))
{
connection.Open();
//Retrieve the Sheets
Sheets = connection.GetSchema("Tables");
//Display the Sheets
foreach (DataRow sheet in Sheets.Rows)
{
Console.WriteLine(sheet["TABLE_NAME"]);
}
//Take the First Sheet
string firstSheet = Sheets.Rows[0][2].ToString();
//Retrieve contents
DataSet Contents = new DataSet();
using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + firstSheet + "]", connection))
{
adapter.Fill(Contents, "MyTable");
}
//Display the contents
foreach (DataRow content in Contents.Tables["MyTable"].Rows)
{
Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
}
Console.WriteLine();
//Remove First Row; Note: This is not heading!
Contents.Tables["MyTable"].Rows.RemoveAt(0);
//Since the first row is removed, Second Row becames first row now.
//Clearing the LastName of our First Row.
Contents.Tables["MyTable"].Rows[0][1] = "";
//Displaying the Contents
foreach (DataRow content in Contents.Tables["MyTable"].Rows)
{
Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}