我正在尝试将Excel工作表导入SQL Server数据库。发生的问题是列映射。 如果Excel工作表中的列名以fullstop结尾(例如:' No。',' Name。'),则C#抛出异常
消息=给定的ColumnName' No。'与任何列都不匹配 在数据源中。
但是,如果我删除了fullstop,它的工作正常。
C#中的映射源代码如下
private void InsertExcelRecords()
{
string FilePath = "C:\\Upload\\" + FileUpload.FileName;
string fileExtension = Path.GetExtension(FileUpload.PostedFile.FileName);
FileUpload.SaveAs("C:\\Upload\\" + FileUpload.FileName);
ExcelConn(FilePath, fileExtension);
Econ.Open();
DataTable dtExcelSheetName = Econ.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();
Query = string.Format("Select * FROM [{0}]", getExcelSheetName + "A7:I");
OleDbCommand Ecom = new OleDbCommand(Query, Econ);
DataSet ds = new DataSet();
OleDbDataAdapter oda = new OleDbDataAdapter(Query, Econ);
Econ.Close();
oda.Fill(ds);
DataTable Exceldt = ds.Tables[0];
connection();
SqlBulkCopy objbulk = new SqlBulkCopy(con);
objbulk.DestinationTableName = "BankTransaction";
objbulk.ColumnMappings.Add("No", "Number");
con.Open();
objbulk.WriteToServer(Exceldt);
con.Close();
}
如果您需要更多信息,请与我们联系。
答案 0 :(得分:3)
您将无法检索列名。从使用OLEDB或ODBC的Excel工作表。因为它不是有效或可识别的语法。
''通常我们用它来区分两个[schema]。[table]。[column]。
OLEDB,ODBC替换列名'。' char'#'
所以你需要替换你的代码
objbulk.ColumnMappings.Add("No.", "Number")
带
objbulk.ColumnMappings.Add("No#", "Number")