كيفية التحقق من وجود DB؟
-
22-08-2019 - |
سؤال
وأنا أتساءل إذا كان هناك طريقة أنيقة للتحقق من وجود DB؟ وباختصار، كيف اختبار الاتصال من سلسلة اتصال ديسيبل؟
والشكر
المحلول
وتعيين Initial Catalog=master
في سلسلة الاتصال وتنفيذ:
select count(*) from sysdatabases where name = @name
ومع @name
لتعيين اسم قاعدة البيانات.
إذا كنت تريد أن تحقق سلسلة الاتصال ككل (وليس وجود قاعدة بيانات مستقلة)، حاول الاتصال به في كتلة try/catch
.
نصائح أخرى
هل يمكن أن مجرد محاولة الاتصال به. إذا كان يطرح استثناء، ثم سلسلة الاتصال سيئة في بعض الطريق، إما عدم وجود قاعدة البيانات، وكلمة السر غير صحيحة، أو أي شيء آخر.
DbConnection db = new SqlConnection(connection_string);
try
{
db.Open();
}
catch ( SqlException e )
{
// Cannot connect to database
}
لتغطية مجموعة من الاحتمالات (الخادم غير موجود، لا وجود قاعدة بيانات، لا لتسجيل الدخول، لا أذونات خادم أسفل، الخ) - أبسط الفكرة هي ببساطة لمحاولة الاتصال كالمعتاد، وأداء شيء تافه - SELECT GETDATE()
على سبيل المثال. إذا كنت تحصل على استثناء، هناك مشكلة!
وهناك أوقات (وخاصة عند التعامل مع أنظمة خارج العملية) عندما try/catch
هو الخيار الأكثر واقعية.
ومجرد محاولة لDBConnection.Open () ملفوفة في كتلة حاول اصطياد DBException.
وحول ما الأنيق الحل كما انك سوف تجد.
والمحاولة
IF NOT EXISTS(SELECT * FROM sys.databases WHERE [name] = @name)
CREATE DATABASE @name;
GO
أو
IF db_id(@name) IS NOT NULL
CREATE DATABASE @name;
GO
SqlConnection.ChangeDatabase (سلسلة) . وأعتقد أنه يمكن استخدام موارد الخادم أقل لغة الاستعلامات البنيويه ثم محاولة الاتصال الجديدة.
إذا كنت تستخدم إطار الكيان أو أنها متاحة لك، يمكنك الاتصال بكل بساطة <لأ href = "https://msdn.microsoft.com/en-us/library/gg696588(v=vs.113) .aspx اتصال "يختلط =" نوفولو "> Database.Exists () :
if (Database.Exists(connectionString))
{
// do something
}
else
{
// do something else
}
وهذا ما عملت بالنسبة لي للتحقق من وجود أي قاعدة بيانات بوستجرس مع C #:
private bool chkDBExists(string connectionStr, string dbname)
{
using (NpgsqlConnection conn = new NpgsqlConnection(connectionStr))
{
using (NpgsqlCommand command = new NpgsqlCommand
($"SELECT DATNAME FROM pg_catalog.pg_database WHERE DATNAME = '{dbname}'", conn))
{
try
{
conn.Open();
var i = command.ExecuteScalar();
conn.Close();
if (i.ToString().Equals(dbname)) //always 'true' (if it exists) or 'null' (if it doesn't)
return true;
else return false;
}
catch (Exception e) { return false; }
}
}
}
و** وإذا ما استخدمت في البيان محاولة اللحاق يمكن ببساطة معرفة ما اذا كان عودة ExecuteScalar فارغة لتكون معدومة DB وليس فارغة إذا كان موجودا.
ويمكنك الحصول على قائمة قاعدة البيانات مع أدناه والتحقق من اسم ديسيبل الخاص بك:
USE master
GO
SELECT name, database_id, create_date
FROM sys.databases ;
GO