1399-04-05 01:48 استخراج آی پی از app.config
zahmah

 
سلام
متاسفانه نتوانستم از راهنمایی تان استفاده کنم. بخش کانکشن استرینگ کد app.config من :
<connectionStrings>
<add
name="DataManagementEntities"
connectionString="metadata=res://*/MyEntityModel.csdl|res://*/MyEntityModel.ssdl|res://*/MyEntityModel.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;Data Source= . ,1433;Initial Catalog=DataManagement;User ID=myName;Password=123456;Connect Timeout=45&quot;"
providerName="System.Data.EntityClient" />
</connectionStrings>


متاسفانه در هنگام خواندن Datasource خطای
Keyword not supported: 'metadata'

را در خط کد زیر نشون میده:
var cb = new System.Data.SqlClient.SqlConnectionStringBuilder(cs);


اگر هم کلا یک کانکشن جدید بخواهم بسازم باز خطای بالا رو نشون میده
1399-04-07 01:00 مشکل در اتصال به سرور
zahmah

 
سلام
مشکل اصلی من در اتصال به سرور توسط کلاینت هاست و نمیخواهم کاربرها به myapp.exe.config جهت تغییر آی پی (موجود در کانکشن استرینگ) مراجعه کنند. به عبارتی در فرم لاگین امکان تنظیم آی پی سرور فراهم باشد.
کد زیر مربوط به لود فرم لاگین است. چکار کنم؟
private void frmLogin_Load(object sender, EventArgs e)
{
label4.BackColor = Color.Red;
label4.Text = " نرم افـــزار به بانک اطلاعاتی متصل نمی باشد";

this.Height = 235;

string cs = System.Configuration.ConfigurationManager.ConnectionStrings["DataManagementEntities"].ConnectionString;
var cb = new System.Data.SqlClient.SqlConnectionStringBuilder(cs);
string data_source = cb.DataSource;

cb.DataSource = txt_ServerIP.Text;
var config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["DataManagementEntities"].ConnectionString = "metadata=res://*/MyEntityModel.csdl|res://*/MyEntityModel.ssdl|res://*/MyEntityModel.msl;provider=System.Data.SqlClient; provider connection string=&quot;Data Source= . ,1433;Initial Catalog=DataManagement;User ID=et_alghadir;Password=jhainh99;Connect Timeout=45&quot;";
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("connectionStrings");

// ابتدای کد اتچ دیتابیس
SqlConnection con;
try
{
con = new SqlConnection("Data Source= " + data_source + ";Initial Catalog=DataManagement;User ID=usen_name;Password=123456;Connect Timeout=45");
//تست اتچ
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(@"SELECT * FROM master.dbo.sysdatabases where name = DataManagement", con);
da.Fill(dt);
if (dt.Rows.Count == 0)
{
string str = "use master;" +
"EXECUTE sp_attach_db @dbname = N'DataManagement' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\db\\DataManagement.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + "\\db\\DataManagement_log.ldf'";

con.Open();
SqlCommand cmd = new SqlCommand(str, con);
cmd.ExecuteNonQuery();
con.Close();
label4.BackColor = Color.Chartreuse;
label4.Text = " نرم افـــزار به بانک اطلاعاتی متصل می باشد";
}
}
catch
{
con = new SqlConnection("Server = . ; DataBase = master ; Integrated Security = True");
//شروع تست اتچ
con.Open();
string str = "use master;" +
"EXECUTE sp_attach_db @dbname = N'DataManagement' , " +
" @filename1 = N'" + System.Environment.CurrentDirectory + "\\db\\DataManagement.mdf'," +
"@filename2 = N'" + System.Environment.CurrentDirectory + "\\db\\DataManagement_log.ldf'";

SqlCommand cmd = new SqlCommand(str, con);
cmd.CommandTimeout = 60;
cmd.ExecuteNonQuery();
con.Close();

Application.Restart();
label4.BackColor = Color.Chartreuse;
label4.Text = " نرم افـــزار به بانک اطلاعاتی متصل می باشد";
//پایان تست اتچ
}
}
1399-04-09 09:26
حاجی شریفی
مؤسس سایت
 
سلام
این رشته اتصال شما از نوع EntityClient است
دقت کنید، نوع EntityClient یک تودرتویی دارد
یعنی خود ConnectionString اصلی در جایی در دل بدنه EntityClient-ConnectionString قرار دارد.
پس باید یکبار با یا EntityConnectionStringBuilder ترجمه شود
و تازه بعدش با SqlConnectionStringBuilder ترجمه شود

چیزی شبیه این کدها:
public static string  GetConnectionStringDataSource(string  key)
{
string cs = System.Configuration.ConfigurationManager.ConnectionStrings[key].ConnectionString;

var cb1 = new System.Data.EntityClient.EntityConnectionStringBuilder(cs);
var cb2 = new System.Data.SqlClient.SqlConnectionStringBuilder(cb1.ProviderConnectionString);

return cb2.DataSource;
}

public static void SetConnectionStringDataSource(string key, string dataSource)
{
string cs = System.Configuration.ConfigurationManager.ConnectionStrings[key].ConnectionString;

var cb1 = new System.Data.EntityClient.EntityConnectionStringBuilder(cs);
var cb2 = new System.Data.SqlClient.SqlConnectionStringBuilder(cb1.ProviderConnectionString);
cb2.DataSource = dataSource;
cb1.ProviderConnectionString = cb2.ConnectionString;

var config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings[key].ConnectionString = cb1.ConnectionString;
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("connectionStrings");
}


دقت کنید که همچنان IP و Port به هم چسبیده ارسال و دریافت میشوند.
مانند 192.168.1.1,1234
البته پورت 1433 برای SqlServer پیشفرض است و نیازی به بیانش نیست.
و
اگر اصل کد را متوجه شوید که چه میکنید و چطور عمل میکند
راحت میتوانید با دستوراتی شبیه اینها بازی کنید تا به مقصود تان برسید.

موفق باشید.