Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将.sql文件传递给sql Server以执行_C#_Sql Server_Database - Fatal编程技术网

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

C# 将.sql文件传递给sql Server以执行,c#,sql-server,database,C#,Sql Server,Database,我有一个应用程序,它以脱机/断开连接的方式生成sql insert和update语句,这样我通常运行的每个查询都只需写入一个txt文件。我这样做是为了让应用程序可以在任何服务器上继续运行而不会延迟,并且即使数据库不可用也可以继续工作 在某种程度上,我希望我的c#应用程序将此查询文件传递给SQL Server,以便执行所有挂起的插入和更新。理想情况下,更新/插入列表将发生在事务中,这样我可以看到它已完成并删除本地txt文件,这样我就不会再次尝试运行它 实现这一目标的最佳方式是什么?将文件FTP到服

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

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


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

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

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

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