【发布时间】:2017-01-02 07:45:07
【问题描述】:
我正在阅读具有数百万条记录的 excel,首先我查询我的表(无记录)并获取 Datable。我使用别名查询我的表以获取我的 excel 表中定义的列名。
var dal = new clsConn();
var sqlQuery = "SELECT FETAPE_THEIR_TRANDATE \"Date\" ,ISSUER Issuer, ISSU_BRAN Branch , STAN_NUMB STAN, TERMID TermID, ACQUIRER Acquirer,DEBIT_AMOUNT Debit,CREDIT_AMOUNT Credit,CARD_NUMB \"Card Number\" , DESCRIPTION Description FROM ALLTRANSACTIONS";
var returntable = dal.ReadData(sqlQuery);
DataRow ds = returntable.NewRow();
var dtExcelData = returntable;
所以我的数据表看起来像这样,
然后我从excel表中读取记录
OleDbConnection con = null;
if (ext == ".xls")
{
con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;");
}
else if (ext == ".xlsx")
{
con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0;IMEX=2;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"");
}
con.Open();
dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string getExcelSheetName = dt.Rows[0]["Table_Name"].ToString();
//OleDbCommand ExcelCommand = new OleDbCommand(@"SELECT * FROM [" + getExcelSheetName + @"]", con);
OleDbCommand ExcelCommand = new OleDbCommand("SELECT F1, F2, F3, F4, F5,F6,F7,F8,F9,F10 FROM [Sheet1$]", con);
OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand);
try
{
ExcelAdapter.Fill(dtExcelData); //Here I give the datatable which i made previously
}
catch (Exception ex)
{
//lblAlert2.CssClass = "message-error";
//lblAlert2.Text = ex.Message;
}
它成功读取并在数据表中填充数据,但在数据表中创建自己的列,如 F1 到 F10 我如何移动这些数据以与我在数据表中定义的列完全匹配
我将如何管理它以不创建其他列 (f1,f2..f10) 任何解决方法都会很明显,或者请解释我做错了什么以及如何实现这一点。
更新: 我的 Excel 文件是这样的
【问题讨论】:
-
您的 Excel 看起来如何?快照会很有帮助。
-
你为什么使用
SELECT F1, F2, F3, F4, F5,F6,F7,F8,F9,F10 FROM [Sheet1$]而不是'select * from [Sheet1$]? -
我已经尝试了两个查询,都给出了相同的结果
-
我已经给出了excel的快照,请看我的编辑
-
您肯定需要在加载前清理 Excel(删除不需要的行)。我已经使用 SQLBulkCopy 将数据从 Excel 加载到具有 ColumnMapping 属性的 SQLServer,但不确定您正在尝试的方法。 在公共网站上分享此类详细信息之前,请不要敏感并隐藏个人信息(信用卡号、姓名)。