将.sql文件传递给SQL Server以执行

时间:2011-06-05 20:55:23

标签: c# sql-server database

我有一个应用程序以脱机/断开连接的方式生成sql insert和update语句,这样我通常运行的每个查询都只是写入txt文件。我这样做是为了使应用程序可以从任何服务器继续运行而没有延迟,并且即使数据库不可用也将继续工作。

在某些时候,我希望我的c#app将此查询文件传递给要执行的SQL Server,以便可以执行所有挂起的插入和更新。理想情况下,更新/插入列表将在事务中发生,因此我可以看到它已完成并删除本地txt文件,因此我不会尝试再次运行它。

实现这一目标的最佳方法是什么?将文件FTP到服务器然后呢?或者我应该只打开与数据库的连接并将整个事件作为一个巨大的查询(CommandText)运行?我担心的是文件可能是10兆,20或50兆字节,所以我正在寻找比通过SqlCommand传递t-sql更强大的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我的建议是为这些文件创建一个中央交换所。例如,创建一个可以将.sql文件上载到服务器的WCF服务。然后让WCF服务处理.sql文件并删除它。这样您就可以继续断开连接,并且您的应用程序不需要知道如何处理文件,除非它们被上传。基本上是一种处理文件的“即发即忘”方法。

答案 1 :(得分:1)

如果这种面向文件的方法实际上适合您,那么您只需要使用ExecuteNonQuery类的SqlCommand方法。将每个文件加载到一个字符串中,将批处理分隔符(GO)上的字符串分开,然后为每个批处理创建一个SqlCommand,将CommandText属性设置为一批SQL。当您致电ExecuteNonQuery时,批次将被发送到服务器并执行。错误将作为异常返回,并且消息也可以返回给您。

但是,虽然这可能对您的情况有效,但在一般情况下不起作用。通常,您可能有多个断开连接的用户尝试更改相同的数据。为了实现这一目标,您需要更通用的同步技术。