Foxtable(狐表)用户栏目专家坐堂 → 结合ExecuteReader 导出excel,请老师看看


  共有3706人关注过本帖树形打印复制链接

主题:结合ExecuteReader 导出excel,请老师看看

帅哥哟,离线,有人找我吗?
jnletao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
结合ExecuteReader 导出excel,请老师看看  发帖心情 Post By:2014/2/28 14:17:00 [只看该作者]

由于正常查询要用分页,而导出时是所有页导出,所以用了如下代码

FilterStr  是查询条件

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "Select * From {操作日志} Where " & FilterStr
dt = cmd.ExecuteReader()

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim ex As New Exporter
    ex.SourceTableName = dt.name '指定导出表
    ex.Format = "Excel" '导出格式为Excel
    ex.FilePath = dlg.FileName  '指定目标文件
    ex.Export() '开始导出
End If

cmd.ExecuteReader 的临时表没法取表名,怎么办

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/2/28 14:31:00 [只看该作者]

不能这么做,建议你使用一个临时表.把表Fill进去

datatables("临时表名").Fill("Select * From {操作日志} Where " & FilterStr,false)



Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim ex As New Exporter
    ex.SourceTableName = "临时表名" '指定导出表
    ex.Format = "Excel" '导出格式为Excel
    ex.FilePath = dlg.FileName  '指定目标文件
    ex.Export() '开始导出
End If

 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/5 12:32:00 [只看该作者]

这是我现在采用方法

If DataTables.Contains("操作日志临时表") = False Then

    Dim dtb As New DataTableBuilder("操作日志临时表")

    dtb.AddDef("用户", Gettype(String), 50)

    dtb.AddDef("时间", Gettype(String), 50)

    dtb.AddDef("IP", Gettype(String), 50)

    dtb.AddDef("MAC", Gettype(String), 255)

    dtb.AddDef("涉及表", Gettype(String), 250)

    dtb.AddDef("涉及列", Gettype(String), 250)

    dtb.AddDef("涉及行", Gettype(String), 50)

    dtb.AddDef("类型", Gettype(String), 50)

    dtb.AddDef("执行操作", Gettype(String))

    dtb.AddDef("日期", Gettype(Date))

    dtb.AddDef("原始数据", Gettype(String))

    dtb.Build()

End If


FilterStr  设置查询条件


DataTables("操作日志临时表").Fill("Select * From {操作日志} Where " & FilterStr,"htdata",False)

 

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog

dlg.Filter= "Excel文件|*.xls" '设置筛选器

If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮

    Dim ex As New Exporter

    ex.SourceTableName = "操作日志临时表" '指定导出表

    ex.Format = "Excel" '导出格式为Excel

    ex.FilePath = dlg.FileName  '指定目标文件

    ex.Export() '开始导出

End If



现在想来,这样方法很笨拙,麻烦。

如果我多个窗体 要做 查询导出,那岂不是要建多个临时表,

求老师们给出个主意。有什么好的方法,即能让用户分页查询,还能全部导出。


 回到顶部
帅哥哟,离线,有人找我吗?
jnletao
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2014/3/5 12:49:00 [只看该作者]

晕了,学艺不精,刚才没仔细的fill的用法,fill 不用管表原来的字段的

这是新的代码

AfterLoad


If DataTables.Contains("导出临时表") = False Then

    Dim dtb As New DataTableBuilder("导出临时表")

    dtb.Build()

End If

DataTables("导出临时表").Fill("Select * From {订单}",False)


导出按钮click


Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog

dlg.Filter= "Excel文件|*.xls" '设置筛选器

If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮

    Dim ex As New Exporter

    ex.SourceTableName = "导出临时表" '指定导出表

    ex.Format = "Excel" '导出格式为Excel

    ex.FilePath = dlg.FileName  '指定目标文件

    ex.Export() '开始导出

End If


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2014/3/5 13:18:00 [只看该作者]

Dim dlg As New SaveFileDialog '定义一个新的SaveFileDialog

dlg.Filter= "Excel文件|*.xls" '设置筛选器

If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮

    Dim ex As New Exporter

    ex.SourceTableName = dt  这样试试

    ex.Format = "Excel" '导出格式为Excel

    ex.FilePath = dlg.FileName  '指定目标文件

    ex.Export() '开始导出

End If


 回到顶部