كيفية الحد من وقت الانتظار لSqlConnection.Open ()؟
-
06-07-2019 - |
سؤال
وأريد لاختبار إذا سلسلة الاتصال هو الصحيح، لذلك أنا خلقت SqlConnection جديد يسمى به أسلوب (). ولكن لا بد لي من الانتظار وقتا طويلا قبل أن يعود عندما الجزء الخادم / DATA_SOURCE من سلسلة الاتصال خاطئ.
وحاولت مضيفا مهلة الاتصال إلى سلسلة الاتصال، فإنه لم ينجح. حاولت فتح الاتصال في موضوع آخر، ثم أدعو Thread.Abort () بعد عدة ثوان. عملت أيا منها.
فما هي الطريقة الصحيحة للقيام بذلك؟ شكرا.
المحلول
وبعد البحث وجدت الحل ( HTTP: / /www.improve.dk/blog/2008/03/10/controlling-sqlconnection-timeouts )، I تعديله قليلا. إذا لم يكن هناك استثناء القيت، ثم سلسلة الاتصال غير صالحة.
var alive = true;
string error = null;
var success = false;
// ReSharper disable AccessToModifiedClosure
// ReSharper disable UseObjectOrCollectionInitializer
var thread = new Thread(() =>
{
try
{
var connection = new SqlConnection(connectionString);
connection.Open();
connection.Close();
if (alive)
success = true;
}
catch (SqlException ex)
{
if (alive)
error = ex.Message;
}
catch (ThreadAbortException)
{
}
finally
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
});
// ReSharper restore AccessToModifiedClosure
// ReSharper restore UseObjectOrCollectionInitializer
thread.IsBackground = true;
var sw = Stopwatch.StartNew();
thread.Start();
var timeout = TimeSpan.FromSeconds(3);
while (sw.Elapsed < timeout)
thread.Join(TimeSpan.FromMilliseconds(200));
sw.Stop();
if (!success)
{
alive = false;
throw new Exception(error ?? "Connection timeout, please check the connection string.");
}
لا تنتمي إلى StackOverflow