请教怎么把sql数据库查询结果直接保存到excel文件

SST_X 2019-01-21 04:57:51
请教怎么把sql数据库查询结果直接保存到excel文件。怎么不行,谢谢大家!

cnn = New SqlConnection("Server=(LocalDB)\MSSQLLocalDB;Initial Catalog = XRAY_COUNTER_SQL;" & "Integrated Security=SSPI;")

cnn.Open()

SqlStr = "EXEC master..xp_cmdshell " & "'" & "bcp XRAY_COUNTER_SQL.dbo.XRAYLOG out " & Chr(34) & "D:\temp1.xls" & Chr(34) & " -c -q -S " & "(LocalDB)\MSSQLLocalDB" & " -T'"

Dim Comm As SqlCommand = New SqlCommand(SqlStr, cnn)


Dim Comm As SqlCommand = New SqlCommand(SqlStr, cnn)
Comm.ExecuteNonQuery()
Comm = Nothing
cnn.Close()
...全文
2500 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
SST_X 2019-02-17
  • 打赏
  • 举报
回复
非常感谢“良朋的代码”,应该有效。我只知道如果是访问mdb的数据库,可以用select into 语句直接导出到excel。但是sql数据库我就不清楚了。查了百度,都是用"EXEC master..xp_cmdshell " & "'" & "bcp XRAY_COUNTER_SQL.dbo.XRAYLOG out " & "D:\temp.xls -c -q -S " & "(LocalDB)\MSSQLLocalDB" & " -T'" 类似的代码,还是有点深奥。试了语句应该没问题,但是cmdshell要开通。太麻烦了。

考虑这个快速导出的原因,是要导出大量数据,提高导出速度。
良朋 2019-02-13
  • 打赏
  • 举报
回复
用CSV格式挺好。用excel的com+组件写excel要安装Excel还得考虑其版本问题,本地可以了换台机就不一定行。如果用数据库访问的格式同样要考虑版本和SQL引擎JDE或ACE。
  • 打赏
  • 举报
回复
引用 19 楼 良朋 的回复:
以上是把DataGrrdView的数据导出到Excel(事实上是一个文本文件),简单修改一下就可以把DataTable数据导出了。
你这是csv文件,不是excel,只能是兼容格式的一种方法。 几个解决方案: 1、用excel的com+组件写excel,需要程序运行的地方安装excel。 2、使用openxml库或其他方法写excel,导出的excel只支持2007+的office(2003可以安装兼容包),无需在程序运行位置安装excel。 3、使用npoi等第三方组件,可以导出全版本兼容的office,无需在程序运行位置安装excel。 你看着挑一个就行。
良朋 2019-02-12
  • 打赏
  • 举报
回复
以上是把DataGrrdView的数据导出到Excel(事实上是一个文本文件),简单修改一下就可以把DataTable数据导出了。
良朋 2019-02-12
  • 打赏
  • 举报
回复
我谢过一个查询,从数据库(sql 或者access)中查询到数据后,显示在DataGridVirw中,然后有一个按钮“导出到Excel”,调用一个函数就可以把DataTable中的数据导出到Excel,这里不需要引用office的DLL,也无需安装Excel,很好用,不过导出的excel很简单,没有排版。我把函数粘贴如下:

'输出到Excel
Private Sub Btn_OutputExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_OutputExcel.Click

If dgv_DataQuery.RowCount < 2 Then
MessageBox.Show("记录为空,不能输出到EXCEL")
Exit Sub
End If

Dim fso As New SaveFileDialog
fso.Filter = "*.xls|*.xls"
fso.OverwritePrompt = True
fso.RestoreDirectory = True
fso.InitialDirectory = ""


If fso.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim ws As New System.IO.StreamWriter(fso.OpenFile, System.Text.Encoding.Default)
Dim str As String = ""
For i As Integer = 0 To Me.dgv_DataQuery.Columns.Count - 1
str += dgv_DataQuery.Columns(i).HeaderCell.Value.ToString & vbTab
Next
str += vbCrLf
For Each row As DataGridViewRow In Me.dgv_DataQuery.Rows
For i As Integer = 0 To Me.dgv_DataQuery.Columns.Count - 1
If Not row.IsNewRow Then
str += row.Cells.Item(i).Value.ToString & vbTab
End If
Next
str += vbCrLf
Next
ws.Write(str)
ws.Dispose()
ws.Close()
End If
End Sub
shoppo0505 2019-01-30
  • 打赏
  • 举报
回复
在excel里面连接数据库,执行sql语句就好了。
SST_X 2019-01-29
  • 打赏
  • 举报
回复
好的。谢谢大家。
没安装office的电脑可以 新建excel写进去吗?
ly5222518000 2019-01-27
  • 打赏
  • 举报
回复
引用 13 楼 worldsteary 的回复:
[quote=引用 4 楼 Fanstorm丶的回复:]新建一个excel文件,把数据一行一行的写进去,保存

我信你个鬼哦(´-ω-`)[/quote]

数据一行行写进去没问题的,肯定不会错的一种方式,前提是要会VBA
ly5222518000 2019-01-27
  • 打赏
  • 举报
回复
数据存成CSV文件就可以了
要是有VBA基础的话就引用Excel的dll
用.net里类似VBA的代码写进去
worldsteary 2019-01-26
  • 打赏
  • 举报
回复
引用 4 楼 Fanstorm丶的回复:
新建一个excel文件,把数据一行一行的写进去,保存
我信你个鬼哦(´-ω-`)
极客即刻 2019-01-25
  • 打赏
  • 举报
回复
楼主写的不错哦,赞一个
luj_1768 2019-01-24
  • 打赏
  • 举报
回复
Comm.ExecuteNonQuery() //!!
SST_X 2019-01-24
  • 打赏
  • 举报
回复
哪位大神请假一下,能帮忙么?谢谢
SST_X 2019-01-23
  • 打赏
  • 举报
回复
mdb 的导出到excel的没有问题,,用sql mdf数据库的不知道怎么导。谁能帮忙?谢谢!
Dim sqlStr1 As String = "EXEC master..xp_cmdshell 'bcp " & SqlStr & " queryout D:\authors.xls -c -S (LocalDB)\MSSQLLocalDB -T'"

这个语句怎么写?谢谢
SST_X 2019-01-22
  • 打赏
  • 举报
回复
mdb 的导入到excel的梅花园问题,用sql mdf数据库的不知道怎么导。谢谢
SST_X 2019-01-21
  • 打赏
  • 举报
回复
Sub ConversionMDFToxls(MDFFileName As String, SqlStr As String)
Dim FileNameStr As String
Dim PathStr As String
On Error Resume Next
FileNameStr = "Reports.xls"
PathStr = SaveDataPathStr
If Dir(PathStr & FileNameStr) <> "" Then Kill(PathStr & FileNameStr)
If Dir(PathStr & "schema.ini") <> "" Then Kill(PathStr & "schema.ini")

cnn = New SqlConnection("Server=(LocalDB)\MSSQLLocalDB;Initial Catalog = XRAY_COUNTER_SQL;" & "Integrated Security=SSPI;")
cnn.Open()


Dim sqlStr1 As String = "EXEC master..xp_cmdshell 'bcp " & SqlStr & " queryout D:\authors.xls -c -S (LocalDB)\MSSQLLocalDB -T'"


Dim Comm As SqlCommand = New SqlCommand(sqlStr1, cnn)

Comm.ExecuteNonQuery()
Comm = Nothing
cnn.Close()


Shell("rundll32.exe url.dll,FileProtocolHandler " & "D:\authors.xls", 1)
End Sub


就是不出来excel文件,帮忙修改一下,谢谢大家。
SST_X 2019-01-21
  • 打赏
  • 举报
回复
Sub ConversionMDBToxls(MDBFileName As String, SqlStr As String)
Dim FileNameStr As String
Dim PathStr As String
On Error Resume Next
FileNameStr = "Reports.xls"
PathStr = SaveDataPathStr
If Dir(PathStr & FileNameStr) <> "" Then Kill(PathStr & FileNameStr)
If Dir(PathStr & "schema.ini") <> "" Then Kill(PathStr & "schema.ini")

cnn = New SqlConnection("Server=(LocalDB)\MSSQLLocalDB;Initial Catalog = XRAY_COUNTER_SQL;" & "Integrated Security=SSPI;")
cnn.Open()

SqlStr = "EXEC master..xp_cmdshell " & "'" & "bcp XRAY_COUNTER_SQL.dbo.XRAYLOG out " & "D:\temp.xls -c -q -S " & "(LocalDB)\MSSQLLocalDB" & " -T'"

Dim Comm As SqlCommand = New SqlCommand(SqlStr, cnn)

Comm.ExecuteNonQuery()
Comm = Nothing
cnn.Close()


Shell("rundll32.exe url.dll,FileProtocolHandler " & PathStr & FileNameStr, 1)
End Sub



这个sqlStr不知道怎么写,里面双引号,单引号的,太复杂
Fanstorm丶 2019-01-21
  • 打赏
  • 举报
回复
新建一个excel文件,把数据一行一行的写进去,保存
SST_X 2019-01-21
  • 打赏
  • 举报
回复
以前没写过这个,现在正好急用。搞不定,弄了几天了。
加载更多回复(2)

16,721

社区成员

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

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