如何在导入数据库期间合并两个 excel 列?
Posted
技术标签:
【中文标题】如何在导入数据库期间合并两个 excel 列?【英文标题】:How can I combine two excel columns during import to a database? 【发布时间】:2017-12-07 14:44:36 【问题描述】:我正在尝试在 excel 中组合日期和时间列,并使用 sqlbulkcopy 将其映射到数据库中的一列。我收到一个错误:
日期][时间不匹配任何列映射
请参阅下面的示例代码。关于如何在不将其复制到数据表的情况下完成此操作的任何想法?
Dim sSourceConstr As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties=""Excel 12.0 Xml;HDR=YES;""", sPath)
Dim sDestConstr As String = ConfigurationManager.ConnectionStrings("SolCards").ConnectionString
Dim sSourceConnection As New OleDbConnection(sSourceConstr)
Using sSourceConnection
Dim sql As String = String.Format("Select [Customer Cod],[Customer],[PAN],[Vehicle],[Date],[Station],[Driver],[Authorized],[Product]" &
", [Pump], [Tran No], [Odo], [Metric], [UPrice], [Qty], [Amount], [TimeFormat] FROM [0$]", "trans")
Dim command As New OleDbCommand(sql, sSourceConnection)
sSourceConnection.Open()
Using dr As OleDbDataReader = command.ExecuteReader()
Using bulkCopy As New SqlBulkCopy(sDestConstr)
bulkCopy.DestinationTableName = "FuelInformation"
'column mapping
bulkCopy.ColumnMappings.Add("[Date] [Time]", "DatePurchased")
bulkCopy.WriteToServer(dr)
End Using
End Using
End Using
【问题讨论】:
Select [Customer Cod]+' '+[Customer]
- 这是合并列
然后我收到此错误“提供程序无法确定日期时间值”@zackraiyan
是否有包含日期和时间的列??
嘿等等! bulkCopy.ColumnMappings.Add("[Date] [Time]", "DatePurchased")
...这行不通。你需要声明 [date],[time] 与什么相关
看我的回答..
【参考方案1】:
我解决这个问题的方法是使用 CONCATENATE 的 excel 实际公式。您可以将其放入您的代码中,也可以在电子表格中添加一个新列并调用该单元格的值。
【讨论】:
【参考方案2】:错误的解决方法是:
"Select ([date],[time])values(@date,@time)"
bulkCopy.ColumnMappings.Add("@Date", "DatePurchased")
bulkCopy.ColumnMappings.Add("@time", "DatePurchased")
【讨论】:
我收到此错误:查询表达式'([Date],[Time])values(@Date,@Time)'中的语法错误(缺少运算符)。 这是我的选择语句:“选择 [Customer Cod],[Customer],[PAN],[Vehicle],([Date],[Time])values(@Date,@Time) ,[站],[司机],[授权],[产品], [泵], [运输号], [Odo], [公制], [UPrice], [Qty], [Amount], [TimeFormat] FROM [0$]", "trans")【参考方案3】:我通过如下使用 CStr() 使其工作,合并两列的问题是列标题名称以关键字为名称。
Dim sSourceConstr As String = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;""", sPath)
Dim sDestConstr As String = ConfigurationManager.ConnectionStrings("SolCards").ConnectionString
Dim sSourceConnection As New OleDbConnection(sSourceConstr)
Using sSourceConnection
Dim sql As String = String.Format("SELECT CStr([Date]) + ' ' + CStr([Time]) as [DatePurchased] ,[Customer Cod],[Customer],[PAN],[Vehicle],[Station],[Driver],[Authorized],[Product], [Pump], [Tran No], [Odo], [Metric], [UPrice], [Qty], [Amount], [TimeFormat] FROM [0$]", "trans")
Dim command As New OleDbCommand(sql, sSourceConnection)
sSourceConnection.Open()
Using dr As OleDbDataReader = command.ExecuteReader()
Using bulkCopy As New SqlBulkCopy(sDestConstr)
bulkCopy.DestinationTableName = "FuelInformation"
'column mapping
bulkCopy.ColumnMappings.Add("[DatePurchased]", "DatePurchased")
bulkCopy.WriteToServer(dr)
End Using
End Using
End Using
【讨论】:
以上是关于如何在导入数据库期间合并两个 excel 列?的主要内容,如果未能解决你的问题,请参考以下文章
python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值合并列response取值)