PDA

View Full Version : سوال: نحوه تشخیص اتوماتیک نوع اس کیو ال سرور (سورس ها) و تغییر آن در connection string



behzadkhan
دوشنبه 18 فروردین 1393, 22:39 عصر
با سلام

سورس پایگاه داده من در کانکشن استرینگ SQLEXPRESS یا SQLSERVER می باشد.

حالا:

موقع وصل شدن به هر کدامشان باید ابتدا بصورت دستی کانشن استرینگ را تغییر دهم سپس برنامه را اجرا کنم.

به عنوان مثال اگر سورس کانکشن استرینگ من SQLSERVER باشد ولی SQLEPRESS روی سیستم نصب باشد برنامه خطا می دهد.

می خواهم روشی باشد که ابتدا تشخیص دهد که چه اس کیو ال (یا سورس هایی) روی سیستم نصب است بعد بطور اتوماتیک سورس کانکشن استرینگ را تغییر داده سپس به اس کیو ال وصل شود.

mhsmity
سه شنبه 19 فروردین 1393, 00:04 صبح
سلام یاد قدیما بخیر
من این کد ها رو درام ولی شاید درست نباشه
یه نگاهی بنداز و تصمیم اخر خودت رو بگیر

این روش خودم بوده با توجه به شرایط که شبکه اونجا داشت.

public Conn()
{
string str = Environment.CurrentDirectory.Substring(0, 12);
if (str != @"\\192.168.10")
{
try
{
try
{
StrConnction = "Data Source=Localhost;Initial Catalog=MdfPincer;Persist Security Info=True;User ID=***;Password=****;Network Library=dbnmpntw";
Con.Open();
}
catch
{
MessageBox.Show("Error In StrConnction:\n" + StrConnction);
try
{
StrConnction = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\MdfPincer;Integrated Security=True;User Instance=True";
Con.Open();
}
catch
{
MessageBox.Show("Error In StrConnction:\n" + StrConnction);
}
}
Con.Close();
}
catch
{ }
}
else
{
try
{
StrConnction = "Data Source=192.168.10.1;Initial Catalog=MdfPincer;Persist Security Info=True;User ID=*****;Password=******;Network Library=dbnmpntw";
Con.Open();
}
catch
{
MessageBox.Show("Error In StrConnction:\n" + StrConnction);
}
Con.Close();
}
Con.ConnectionString = StrConnction;
}

behzadkhan
سه شنبه 19 فروردین 1393, 00:19 صبح
سلام

ممنون جالب بود(ولی خوب خودت گفتی قدیمی بود).

دیگه چه راهی وجود داره؟

با تشکر

mhsmity
سه شنبه 19 فروردین 1393, 00:56 صبح
منظور این بود که قدیما استفاده می کردم
نه اون قدیمش و نه الان نمی دونم روش درست چی هست
اگه پیدا کردی اینجا بزار ممنون

behzadkhan
سه شنبه 19 فروردین 1393, 13:34 عصر
سلام

یه نگاه به این بنداز:

private void Form1_Load(object sender, EventArgs e)
{
List<String> server = new List<string>();
List<String> dbname = new List<string>();
string con;


//StartService("VM-XP", 1000);
server = EnumerateServers();
try
{
for (int i = 0; i < server.Count; i++)
{
MessageBox.Show(server[i]);
con = @"Data Source='" + server[i] + "';user id=;password=;trusted_connection=yes;connection timeout = 30;MultipleActiveResultSets = true";
dbname = new List<string>();
dbname = EnumerateDatabases(con);
for (int j = 0; j < dbname.Count; j++)
{
MessageBox.Show(dbname[j]);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

public static List<String> EnumerateServers()
{
try
{
DataTable instances = new DataTable();
instances = SqlDataSourceEnumerator.Instance.GetDataSources();
if ((instances == null) || (instances.Rows.Count < 1)) return null;


var result = new List<String>();
foreach (DataRow instance in instances.Rows)
{
var serverName = instance["ServerName"].ToString();
var instanceName = instance["InstanceName"].ToString();
result.Add(String.IsNullOrEmpty(instanceName) ? serverName : String.Format(@"{0}\{1}", serverName, instanceName));
}
return result;
}
catch (SqlException ex)
{


MessageBox.Show(ex.Message);
return null;
}
}


public static List<String> EnumerateDatabases(String connectionString)
{
try
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
var databases = connection.GetSchema("Databases");
connection.Close();
if ((databases == null) || (databases.Rows.Count < 1)) return null;


var result = new List<String>();
foreach (DataRow database in databases.Rows)
{
result.Add(database["database_name"].ToString());
}
return result;
}
}
catch (SqlException ex)
{


MessageBox.Show(ex.Message);
return null;
}
}







راستی تو سورس های (ًُSQLEXPRESS, SQLSERVER, ...) مختلف تستش کن.

با تشکر