列名中带有句号的 SqlBulkCopy 映射问题

SqlBulkCopy mapping issue with fullstops in column names

我正在尝试将 Excel sheet 导入到 SQL 服务器数据库。发生的问题是列映射。 如果 Excel Sheet 中的列名称以句号结尾(例如:'No.'、'Name.'),C# 将抛出异常

Message=The given ColumnName 'No.' does not match up with any column in data source.

但是如果我删除句号,它工作得非常好。

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();
}

如果您需要更多信息,请告诉我。

您将无法使用 检索列名。来自 excel sheet 使用 OLEDB 或 ODBC。因为它不是有效或可识别的语法。

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

OLEDB,ODBC Replace column name '.' char with '#'

所以你需要更换你的代码

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

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