PDA

View Full Version : آموزش: روش ایجاد دیاگرام های قبلی ایجد شده در دیتا بیس ها



hojjatshariffam
سه شنبه 08 مرداد 1392, 20:18 عصر
سلام
قبلا خودم تو دیتا بیس هام دیاگرام ایجاد می کردم و کارامو باهاش انجام می دادم ، ولی وقتی که تو سیستم مقصد (کاربر) دیتا بیس رو با کد ایجاد می کردم دیکه دیاگرامی وجود نداشت تا بتونم اشکالات رو دوباره بررسی و تحلیل کنم
برا همین دوباره مجبور می شدم دیاگرام رو بسازم
حالا این مشکل رو برا شما حل می کنم
اگ شما در یک دیتا بیس دیاگرامی ساختین که می خواین از اون یه کپی داشته باشن باید از ردیف های جدول sysdiagram که principal_id آنها یک باشه بک بگیرید
بعدا می تونید این رکورد ها رو دوباره درج کنید ، پیاگرام ها تون دوباره برمی گرده
این کدی که می زارم برای دو دیتا بیس در دو سرور جداگانه هستش
یعنی دو دیتا بیس همسان در دو تا سرور جدا دارم که تو یکیش دیاگرام وجود نداره ، در این صورت بعد از اجرای کد ، دیاگرام ها در دیتابیس دوم هم کپی میشه

public void selectDiagram()
{
try
{
String SQLstr = "Select [name],[principal_id],[diagram_id],[version] From [sysdiagrams] ";
SqlConnection Con1 =new SqlConnection(@"server=.; database=Contact; user id=ContactUser; password=1234;");
SqlDataAdapter Adapter0 = new SqlDataAdapter(SQLstr, Con1);
Adapter0.SelectCommand.CommandType = CommandType.Text;
Con1.Open();
Adapter0.Fill(DS);
Con1.Close();
DT = DS.Tables[0];

SqlConnection Con2 =new SqlConnection(@"Data Source=SERVER\SQLEXPRESS;Initial Catalog=Contact;Integrated Security=True");

Con2.Open();

foreach (DataRow row in DT.Rows)
{
SQLstr = "Insert Into [sysdiagrams] ([name],[principal_id],[version]) Values ('" + row[0] +
"'," + row[1] + "," + row[3] + ")";
SqlCommand SQLCOMM = new SqlCommand(SQLstr);
SQLCOMM.Connection = Con2;
SQLCOMM.CommandType = CommandType.Text;
SQLCOMM.ExecuteNonQuery();
}
Con2.Close();
FMessageBox.Show("تعداد " + DT.Rows.Count.ToString() + "سطر ثبت شد");

foreach (DataRow row in DT.Rows)
{
SQLstr = "Select [definition] From [sysdiagrams] Where [diagram_id] =" + row[2] +
" And [definition] is NOT NULL";

Byte[] TempByte = null;
SqlCommand Sql_Command = new SqlCommand(SQLstr, Con1);
Con1.Open();
TempByte = (byte[]) Sql_Command.ExecuteScalar();
Con1.Close();



SQLstr = "Update [sysdiagrams] Set " + "[definition] = @Image " + " Where [diagram_id]=" + row[2];
SqlCommand SQLCOMM = new SqlCommand(SQLstr, Con2);
SQLCOMM.Parameters.Add("@Image", SqlDbType.Image);
SQLCOMM.Parameters["@Image"].Value = TempByte;
Con2.Open();
SQLCOMM.ExecuteNonQuery();


Con2.Close();
}
}
catch (Exception ex)
{
FMessageBox.Show(ex.Message);
}
}

دو تا کانکشن دارم که هر کدوم برای یه سرور هستش
اگر هر دو دیتا بیس در یک سرور قرار دارد در کانکشن استرینگ ها فقط نام دیتابیس رو باید عوض کنید.