Excel导入数据库失败

ksmark 2008-03-19 10:14:30
Dim openFile As New OpenFileDialog
Dim fileName As String
Dim filePath As String
Dim fileNameTemp As String

Dim txtSql As String = ""
Dim msgText As String = ""
Dim ExcelInput_DT As DataTable
Dim Excel_DT As DataTable
Dim tableName As String
'读出路径
RExInputInI()
If ExPath Is Nothing Then
openFile.Filter = "Excel文件(*.xls)|*.xls"
If openFile.ShowDialog = Windows.Forms.DialogResult.Cancel Then
MessageBox.Show("没有导入的Excel文件!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Return
Else
filePath = openFile.FileName
End If
Else
filePath = ExPath
End If
fileNameTemp = Microsoft.VisualBasic.Right(filePath, filePath.Length - filePath.LastIndexOf("\") - 1)
fileName = Microsoft.VisualBasic.Left(fileNameTemp, fileNameTemp.Length - 4)
Dim conExcel As OleDb.OleDbConnection
Dim conString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filePath & "; Extended Properties=Excel 8.0;"
Try
conExcel = New OleDb.OleDbConnection(conString)
conExcel.Open()
'获取excel表()
Excel_DT = conExcel.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, Nothing)
'获取sheet名,其中(0)(1)...(N): 按名称排列的表单元素
tableName = Excel_DT.Rows(0)(2).ToString().Trim()
tableName = "[" & tableName.Replace(" ' ", " ") & "]"


Catch ex As Exception
MessageBox.Show(ex.Message + "打开Excel出错!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
conExcel.Dispose()

End Try

Try
'就在这个地方,是不是我的SQL语句有问题。
txtSql = "insert into wblLabel select distinct * from [Excel 8.0;database=" + fileName + "]." + tableName + " where 品目コード not IN (select code from wblLabel)"


ExcelInput_DT = ExecuteSql(txtSql, msgText)

Catch ex As Exception
MessageBox.Show(ex.Message + "导入失败!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

我的Excel表也找到了,我把那就sql语句复制到查询分析器中也没有报错,但是执行到最后就报错了。说对象名'Excel8.0;database=EXCEL.SHEET$'无效。执行数据库操作失败!
...全文
344 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
_NET2004 2008-03-19
  • 打赏
  • 举报
回复
如果单独打开EXCEL文件需要加入这个数据提供者

Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\test.xls;Extended Properties=Excel 8.0
lizhengnan 2008-03-19
  • 打赏
  • 举报
回复
insert into wblLabel select distinct * from [Excel 8.0;database=" + fileName + "]." + tableName + " where 品目コード not IN (select code from wblLabel)

这个不对.

insert into wblLabel select distinct * from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=C:\test.xls;Extended Properties=Excel 8.0')...[sheet名$] where 品目コード not IN (select code from wblLabel)

你想在SQL SERVER中打开EXCEL得用OPENDATASOURCE


ksmark 2008-03-19
  • 打赏
  • 举报
回复
怎么没有人过来看看啊。
我的Excel安装的是office 2007 OS:Windows XP Professional
ksmark 2008-03-19
  • 打赏
  • 举报
回复
全部搞定。
最后一个问题是 Excel中的列用Select选出后,居然不是按照原来Excel中列的顺序。重新按照数据库中的那张表重新排列一下就可以了。
lizhengnan 2008-03-19
  • 打赏
  • 举报
回复
'MADE IN CHINA' 怎么可能转换为INT型呢.不是你EXCEL中数据存的不对,就是你EXCEL中的列没和数据库中的字段对应上.
ksmark 2008-03-19
  • 打赏
  • 举报
回复
说明一下,数据库中的字段类型有int类型的。

加问一句:是不是如果从Excel导入的数据,在数据库中设置字段的时候,一定要是varchar类型啊?
ksmark 2008-03-19
  • 打赏
  • 举报
回复
上面的语句问题解决了。
新问题出现了。
问题如下:
“将 nvarchar 值 'MADE IN CHINA' 转换为数据类型为 int 的列时发生语法错误。”

晕了!
lizhengnan 2008-03-19
  • 打赏
  • 举报
回复
那可能是版本的问题了吧.
ksmark 2008-03-19
  • 打赏
  • 举报
回复
调试sql语句已经没有问题了。但是还是出错了
错误如下:
未能找到OLE DB提供程序'Provider=Microsoft.Jet.OLEDB.4.0'的注册表项。OLE DB错误跟踪[Non-interface error:Provider not registered]。执行数据库作失败。

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧