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

问题描述:

我有一个应用程序以离线/断开方式生成sql插入和更新语句,这样我通常运行的每个查询都会简单地写入一个txt文件。我这样做是为了让应用程序可以在没有延迟的情况下从任何服务器继续运行,并且即使数据库变得不可用也将继续工作。将.sql文件传递给SQL Server执行

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

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

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

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

但是,虽然这可能适用于您的情况,但它在一般情况下不起作用。一般而言,您可能有多个断开连接的用户试图对相同的数据进行更改。为了使这项工作,你需要一个更一般的同步技术。