【问题标题】:Create CSV report from SQL database [closed]从 SQL 数据库创建 CSV 报告 [关闭]
【发布时间】:2018-09-03 21:55:07
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 嘿VPanda。欢迎来到本站。这可以通过许多不同的方式来完成;因此有些人将您的问题标记为“太宽泛”。您如何处理它取决于要求;你有一个 C# 程序运行一些逻辑吗?如果不是,为什么选择 C# 而不是 PowerShell 脚本或 SQL 作业等。我个人倾向于使用 PowerShell + Windows Scheduler 来完成此类任务,因为 PS 提供了连接数据库和导出到 CSV 的简单方法;但是我的 BI 或 DBA 团队的同事可能会使用 SSIS,而我的开发同事会使用 C#;只是采取他们所知道的。
  • 即任务相当简单/使用哪种语言来解决它并不重要;而是选择你知道并且可以支持的东西。你甚至可以在 SQL 中完成所有的事情;例如见social.msdn.microsoft.com/Forums/sqlserver/en-US/…
  • 当你说 SQL 时,你是指 SQL Server 吗?因为 SQL 是一种代码语言。有许多数据管理程序在返回或修改数据时需要 SQL,其中 SQL Server 只是其中之一。
  • 感谢您的快速回复。很抱歉发布一个广泛的问题,第一次使用 Stackoverflow,我应该更具体。所以最终编写了一段 C# 代码,并能够生成包含数据库记录的 CSV 文件。

标签: c# sql export-to-csv


【解决方案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 任务计划程序;只需将上述内容保存到文件(例如c:\scheduledTasks\myTask.ps1)并创建一个新任务,其操作定义为:

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

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

C#

可以在此处找到从数据库获取数据并输出到 CSV 的 C# 程序示例:https://stackoverflow.com/a/24458994/361842

这非常好,因为编译后的文件比脚本更不容易附加(但请记住,如果它与调度程序一起运行,exe 总是可以交换为不同的 exe)。 为避免这种情况,您可能希望将其编写为作为服务运行。更多信息在这里:https://stackoverflow.com/a/503606/361842

【讨论】:

  • 感谢您的建议。我使用 C# 创建 CSV 文件并将数据库记录读取到同一个文件中。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的回复。我能够使用 C# 完成任务,并将使用任务调度程序每周运行它并将其转储到共享驱动器。
猜你喜欢
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多