我正在读excel有像百万条记录先查询我的表(无记录),并获得Datable。我查询我的表来获取列名称定义在我的Excel表中使用别名。如何从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) 任何解决办法将是可观的或请解释什么,我做错了,我怎么能做到这一点。
UPDATE: 我的Excel文件看起来像这样
你的excel是怎样的?快照会有所帮助。 – Spidey
为什么使用'选择F1,F2,F3,F4,F5,F6,F7,F8,F9,F10 FROM [Sheet1 $]'而不是'从[Sheet1 $]'选择*? – Spidey
我试过这两个查询,两者都给出了相同的结果 –