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

本文关键字:sql 执行 Server 文件 | 更新日期: 2023-09-27 17:58:23

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

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

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

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

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

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

然而,尽管这可能在您的情况下有效,但在一般情况下不起作用。通常,可能会有几个断开连接的用户试图更改同一数据。要实现这一点,您需要一种更通用的同步技术。