从SQL数据库创建CSV报告

时间:2018-09-03 21:55:07

标签: c# sql export-to-csv

从SQL数据库创建CSV报告的最佳方法是什么?

可以使用Visual Studio C#完成吗?

目标:每周从SQL数据库生成CSV报告。

谢谢

2 个答案:

答案 0 :(得分:1)

可以通过多种方式完成此任务。要决定考虑以下内容:

  • 已经使用了哪些工具和技术?
  • 您是否需要诸如日志记录和警报之类的功能;这样您就知道问题出在哪里以及哪里出了问题吗?
  • 您是否有多个计划任务/是否要集中管理所有任务,还是可以在各种不同的位置定义它们
  • 谁需要支持此功能?/有哪些工具可以使他们轻松呢?
  • 每种方法的安全风险和含义是什么?
  • 如果服务器出现故障会怎样?您需要高可用性吗?

下面,我列出了一些简单的方法以及相关内容的链接。但这只是让您步入正轨;因为这个问题没有一个黄金答案;但是有很多选择,每种都有各自的优缺点。

SQL

您可以使用SQL代理计划任务。

您可以使用xp_cmdshell执行BCP或SQLCMD调用以将SQL数据导出到CSV。可以在以下位置找到使用BCP的示例:https://stackoverflow.com/a/43991158/361842 注意:启用xp_cmdshell是安全隐患;因为这将在SQL服务的服务帐户下运行任务;因此可能会允许具有访问权限的用户使用xp_cmdshell执行自己的脚本,然后这些脚本可能会冒充该帐户/授予这些用户访问未分配给其帐户的特权的权限。

此方法的优点是100%SQL;因此不必担心其他依赖项。

PowerShell

在PowerShell中,从数据库导出到CSV很简单;可以使用以下单行代码完成:

Invoke-Sqlcmd -ServerInstance 'myServer\instance' -Database 'myDb' -Username 'user' -Password 'super$£cret' -Query 'select some, stuff from myTable' | Export-csv -NoTypeInformation -Path '\\server\share\path\file.csv'

要每周执行一次此操作,可以使用Windows Task Scheduler;只需将以上内容保存到文件(例如c:\scheduledTasks\myTask.ps1)中,然后创建一个新任务,并将其操作定义为:

  • 程序:Powershell.exe
  • 添加参数:-ExecutionPolicy Bypass -File "c:\scheduledTasks\myTask.ps1"
  • 开始于:c:\scheduledTasks\

这样做的好处是,大多数机器上都安装了PS,它运行起来既快捷又容易,并且适应性强。 缺点是您需要考虑安全性;也就是说,您不想以纯文本形式放置凭据,因此您要么需要使用Windows身份验证,要么对凭据进行加密;并且还需要确保托管脚本的目录已锁定,以避免任何人出于自己的目的修改您的脚本,或者只是向他们显示未加密的凭据。

C#

可以在以下位置找到一个C#程序示例,该程序可以从数据库中获取数据并输出为CSV:https://stackoverflow.com/a/24458994/361842

这非常好,因为编译后的文件比脚本更不容易附加(尽管请记住,如果正在使用调度程序运行该exe,则始终可以将其替换为其他exe)。 为避免这种情况,您可能需要编写此代码以作为服务运行。这里的更多信息:https://stackoverflow.com/a/503606/361842

答案 1 :(得分:0)

如果这些是您手动运行的报告,则建议您使用SQL GUI工具(我使用Navicat,但还有许多其他选项)。其中大多数功能都可以让您定义查询,甚至可以定义一些相当高级的报告,然后可以轻松地将其运行并导出为CSV。

如果要自动运行它们,则需要编写一些代码来执行任务。我建议Python比C#更容易做到这一点,但是在C#中肯定是可行的。为此,您需要为数据库找到合适的C#API(除非.NET内置了此功能-自从我在该领域工作以来已经有一段时间了),然后使用它来查询数据库。然后,使用可用的标准文件编写类来创建CSV文件应该相当简单。