好吧,为了将我的应用程序移到云端,我将本地SQL数据库移到了Azure SQL中。问题是,与新的Azure SQL数据库的连接是如此'flakey',我即将把它带回家。Azure SQL连接正在计时
该任务是循环并在数据库中创建总共约481K条记录。
连接字符串
"Server=tcp:xxx,1433;Initial Catalog=xx;Persist Security Info=False;User ID=xx;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;ConnectRetryCount=255;"
它每次运行SQL查询并不复杂。只需将三个值插入三列即可。 (列和值改变,以保护一些内部工作)
Insert Into TheTable (C1, C2, C3) VALUES ('V1', 'V2', 'V3')
但在随机点它抛出这个。
System.ComponentModel.Win32Exception(0x80004005):等待操作超时超时超时。操作完成之前超时的时间或服务器没有响应。在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,动作1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
1次完成,字符串方法名,布尔sendToPipe,的Int32超时,布尔& usedCache,布尔asyncWrite,布尔inRetry) 在System.Data.SqlClient.SqlCommand .ExecuteNonQuery() 在XX中d:\ PATHOFTHEFILE:线420
注意
1)我打开和每个I创建记录时间关闭连接并在下一步骤关闭它。
2)除了我以外没有其他人打数据库。
3)数据库服务设置为S1。
4)是的 - 我感到讽刺的是,程序崩溃在线420.我试图找到药物测试代码的方法。
问题
1)我的连接字符串有什么问题吗?该文档说,当连接到Azure SQL数据库时,我应该使用超时值30。坦率地说,当我将超时设置为0时,代码运行得更好(或者至少寿命更长)。
2)起初,我尝试使用单个连接处理整个481K INSERT语句的循环。这是一个糟糕的设计? Azure SQL可靠性持续多久?
3)我对于在Azure SQL上构建稳固应用程序的能力没有感到一丝温暖。有人能够指出我有关本地SQL和Azure SQL之间差异的很好的参考。我已经经历了我能找到的一切,而那里似乎并没有那么多。
4)我喜欢我可以使用MMC连接到Azure SQL的事实。但是(通常来说)我不能从MMC那里获得各种监控信息。任何人有一个链接到的东西,可以帮助我真正明白发生了什么事情在数据库中不使用那可怕的Azure的门户网站
更新#1
罪名成立
public static void RunSQL(string SQLString)
{
int a = 0;
SqlCommand Command = new SqlCommand(SQLString, TheConnection);
try
{
a = Command.ExecuteNonQuery();
}
catch (Exception ex)
{
Notifications.EventLogging.ProcessEvent(SQLString + " go boom " + ex.InnerException + ex.Message + ex.StackTrace);
Notifications.EventLogging.ProcessEvent("Time Of Death" + DateTime.Now);
Console.ReadKey();
}
您是否使用SqlConnections和SqlCommands连接到数据库?如果是这样,我相信我确切地知道你的问题是什么。 –
有罪负责 - 请参阅我上面的实际代码在更新#1 – TRH