从Visual Studio到SQL Server的数据上载超时



我在通过vb.net将SQL Server Management Studio生成的SQL转储发送到另一台SQL Server时遇到了一个大问题。我制作了这样的SQL文件:数据库/任务/脚本。。。

在删除Dump中的每个"GO"命令后,我设法上传到本地SQL Server 2012。但只有当我为任何表制作不同的脚本时,这才有效。如果我使用一个大文件,我会超时。

现在我想通过Internet连接将数据(50 MB)传输到另一个SQL Server。此服务器上仅生成5个表中的3个:-(

我收到以下超时错误(德语版,抱歉):

"Eine Ausnahme(以前的机会)des Typs"系统。数据SqlClient。SqlException"出现在System.Data.dll aufgetreten中。超时abgelaufen。Zeitlimit是Vorgangsüberschritten或服务器的一部分。">

知道哪一边超时了吗(SQL Server或vb.net)?有没有一种更安全的方法将大量数据上传到SQL Server?

这是我使用的代码(SQL脚本在My.Resources.SQLDump中):

'####SQLDump  #######
Dim SQLscript As String = My.Resources.SQLDump

SQLscript = "USE [" + TextBoxDB.Text + "] " + vbCrLf + SQLscript

Using connection As New SqlConnection(Verbind.ConStr)
Using command As New SqlCommand()
' Set the connection
command.Connection = connection
' Not necessary, but good practice
command.CommandType = CommandType.Text
' Example query using parameters
command.CommandText = SQLscript
Try
connection.Open()
rowsAffected = command.ExecuteNonQuery()
Catch ex As Exception
Debug.Print(ex.Message)
Finally
command.Dispose()
connection.Dispose()
End Try
'command.ExecuteNonQuery()
End Using ' Dispose Command
End Using ' Dispose (and hence Close) Connection
MsgBox("DB-Upload 1/5 fertig!")

是否有更安全的方法将大量数据上传到SQL Server?

是的,有几种方法可以将数据加载到SQL Server 中

  1. bcp实用程序
  2. BULK INSERT语句
  3. 打开行集
  4. SQL Server导入和导出向导

重要提示:在64位计算机上,Integration Services安装64位版本的SQL Server导入和导出向导(DTSWizard.exe)。但是,一些数据源,如Access或Excel,只有32位提供程序可用。使用这些数据源,您可能必须安装并运行男巫要安装32位版本的向导,请选择安装过程中的客户端工具或SQL Server数据工具(SSDT)。

  1. SSIS

    创建SSIS包的教程

作为一名SSIS开发人员,我可以深入研究并演示使用类似的SSIS导入数据的可能方法

  • 批量导入
  • 脚本任务
  • 平面文件源/Excel源
  • 等等。但是这和你问的问题不一样

关于解决错误,您可以在代码中设置命令超时属性,使其在任何特定的时间限制或无限的时间内运行。

命令。CommandTimeout=1;

注意:在异步期间将忽略CommandTimeout属性方法调用,如BeginExecuteReader。

已编辑以下是示例代码

Using command As New SqlCommand()
command.Connection = connection
command.CommandType = CommandType.Text
command.CommandText = SQLscript
command.CommandTimeout = 1
Try
connection.Open()
rowsAffected = command.ExecuteNonQuery()
Catch ex As Exception
Debug.Print(ex.Message)
Finally
command.Dispose()
connection.Dispose()
End Try
End Using 

另一种方法是在连接字符串中延长连接超时时间。它接受表示秒数的整数(在下面的示例中,连接超时设置为30秒;0表示无限制)

连接超时=30;

一次性移动的导入/导出向导

由于您能够生成脚本,因此您可以访问源代码。由于您能够执行它们,因此您可以访问目标,并且安装了Management Studio。最快的选项IMO是SqlServer提供的导入导出实用程序。

在Sql Server Management Studio中,右键单击源数据库名称,单击"任务",然后单击"导出数据"。这将打开一个向导,允许您放入"源"、"目标"并拾取要导出的对象。

虽然50 MB的脚本很大,但50MB的数据移动应该在几分钟内完成。

一次又一次地移动数据

你有几个选择,我会选择OpenRowset,尤其是对于你正在移动的数据的大小。这是一份参考资料https://msdn.microsoft.com/en-us/library/ms190312.aspx

如果您定期移动价值GB的数据,那么SSIS包是您的最佳选择。这是一个教程https://msdn.microsoft.com/en-us/library/ms169917.aspx

最新更新