列名中带有句号的 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")
我正在尝试将 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")