列名

时间:2017-05-11 07:21:38

标签: c# sql-server sqlbulkcopy

我正在尝试将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();
}

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:3)

您将无法检索列名。从使用OLEDB或ODBC的Excel工作表。因为它不是有效或可识别的语法。

''通常我们用它来区分两个[schema]。[table]。[column]。

  

OLEDB,ODBC替换列名'。' char'#'

所以你需要替换你的代码

objbulk.ColumnMappings.Add("No.", "Number")

objbulk.ColumnMappings.Add("No#", "Number")