المشاركات : 20
المواضيع 8
الإنتساب : Nov 2019
السمعة :
0
الشكر: 1
تم شكره 17 مرات في 15 مشاركات
26-11-19, 05:10 AM
(آخر تعديل لهذه المشاركة : 26-11-19, 05:21 AM {2} بواسطة Mustafa Shaker.)
(25-11-19, 02:22 AM)Mustafa Shaker كتب : (24-11-19, 05:20 PM)asemshahen5 كتب : الكود موجود في كلاس : AttachDatabaseNameCls
اسمه :AttachDatabaseName
حمل المثال و انظر الى الكلاس سيجيب عن كل اسالتك .
عفوا اخي .. حاولت فهم المثال ولكني لم اصل للحل المطلوب
ممكن لو في فيديو تبعتهولي او كود attach و كيفيه كتابته في vb.net و اثبت برنامج sqlexpress بس ولا مطلوب حاجه تاني لاني بجد تعبت و جربت تقريبا الConnection String كلها و بيظهر خطأ في الاتصال
و مشكور مقدما
(25-11-19, 02:22 AM)Mustafa Shaker كتب : (24-11-19, 05:20 PM)asemshahen5 كتب : الكود موجود في كلاس : AttachDatabaseNameCls
اسمه :AttachDatabaseName
حمل المثال و انظر الى الكلاس سيجيب عن كل اسالتك .
عفوا اخي .. حاولت فهم المثال ولكني لم اصل للحل المطلوب
ممكن لو في فيديو تبعتهولي او كود attach و كيفيه كتابته في vb.net و اثبت برنامج sqlexpress بس ولا مطلوب حاجه تاني لاني بجد تعبت و جربت تقريبا الConnection String كلها و بيظهر خطأ في الاتصال
و مشكور مقدما
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
26-11-19, 02:49 PM
(آخر تعديل لهذه المشاركة : 26-11-19, 03:41 PM {2} بواسطة asemshahen5.)
لعمل اتاش استخدم اسم قاعدة البيانات في نص الاتصال ماستر اي يوجد نص اتصال خاص بعمل الاتاش ليس له علاقة بنص الاتصال الخاص بقاعدة بيانات البرنامج .
هذا الكود مشروح :
PHP كود :
''' <summary> ''' عمل اتاش لقاعدة البيانات ''' </summary> ''' <param name="MYDBNAME">اسم قاعدة البيانات</param> ''' <param name="f1lepathprimary">مكان و اسم ملف mdf</param> ''' <param name="f1lepathlog">مكان و اسم الملف log</param> ''' <returns>العودة بقيمة True في حال النجاح و قيمة False في حال الفشل</returns> ''' <remarks>شركة العاصم للبرمجيات https://asemshahen5.blogspot.com/ </remarks> Public Function AttachDatabaseName(MYDBNAME As String, f1lepathprimary As String, f1lepathlog As String) As Boolean Try 'كود الاتصال الخاص بعملية الاتاش' Dim SqlConnection1 As New SqlClient.SqlConnection("Data Source=(Local)\sqlexpress " & ";Initial Catalog=tempdb;Integrated Security=SSPI;") 'تعريف سيكول كوماند' Dim CMD As New SqlClient.SqlCommand() 'نوع الكوماند تيكست اي استعلام' CMD.CommandType = CommandType.Text 'تحديد كود الاتصال بنص الاتصال الذي في الاعلى' CMD.Connection = SqlConnection1 If SqlConnection1.State = ConnectionState.Closed Then SqlConnection1.Open() 'الاستعلام الخاص بعمل الاتاش' CMD.CommandText = "sp_attach_db " & MYDBNAME & ",'" & f1lepathprimary & "'" & ",'" & f1lepathlog & "'" 'الاستعلام الخاص بعمل الاتاش' '' OR CMD.CommandText = "CREATE DATABASE " + MYDBNAME + " ON (FILENAME = '" & f1lepath & "')FOR ATTACH" 'تنفيذ الاستعلام' CMD.ExecuteNonQuery() 'اغلاق الاتصال' SqlConnection1.Close() SqlConnection1.Dispose() 'رسالة تخبر بنجاح عملية الاتاش' MessageBox.Show("تم انشاء اتصال قاعدة البيانات بالسرفر ", "Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading) 'العودة بقيمة True' Return True Catch ex As Exception 'رسالة تفيد بفشل عملية الاتاش و سبب الخطء' MessageBox.Show(ex.Message & vbNewLine & "فشل البرنامج فى انشاء اتصال بقاعدة البيانات بالسرفر", "Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading) 'العودة بقيمة False' Return False End Try End Function
شرح كود الاستدعاء الخاص بالزر :
PHP كود :
'كود الاستدعاء الخاص بعملية الاتاش في زر' Private Sub BtnAttachDatabase_Click(sender As Object, e As EventArgs) Handles BtnAttachDatabase.Click 'تعريف متغير صندوق حوار فتح' Dim openfd As New OpenFileDialog 'الفلتر على نوع قاعدة البيانات mdf' openfd.Filter = "Sql Server Database(*.mdf)|*.mdf" 'عنوان صندوق الحوار فتح' openfd.Title = "Attach Database" 'التاكد من اختيار موافق لتلافي حصول خطا' If openfd.ShowDialog = DialogResult.OK Then 'التاكد من عدم وجود قاعدة البيانات' If (Cls.GetAttachDatabaseName(Txt_DBName.Text) = False) Then 'تعريف متغير نصي فيه اسم قاعدة البيانات' Dim SafeFileName As String = openfd.SafeFileName 'حذف لاحقة اسم قاعدة البيانات' SafeFileName = SafeFileName.Replace(".mdf", "") 'تعريف متغير نصي فيه اسم و عنوان قاعدة البيانات' Dim DBName As String = openfd.FileName 'استبدال لاحقة mdf من اسم و عنوان قاعدة البيانات بلاحقة log' DBName = DBName.Replace(".mdf", "_log.ldf") 'وضع اسم ومسار ملف اللوغ في ليبل' Lbl_DBPath_LDF.Text = DBName 'وضع اسم و ملف الـ mdf في ليبل اخر' Lbl_DBPath_MDF.Text = openfd.FileName 'رسالة تاكد من عمل الاتاش' If MessageBox.Show("Are You Sure Attach Database File : " & openfd.FileName, "Attach Database", MessageBoxButtons.YesNo) = DialogResult.Yes Then 'عمل شرط في حال نجاح عملية الاتاش' If (Cls.AttachDatabaseName(SafeFileName, openfd.FileName, DBName) = True) Then 'اعادة تعبئة الداتاغريدفيو باسماء قواعد البيانات' dataGridView1.DataSource = Cls.FindDatabaseByName(Txt_DBName.Text) Else 'اعادة تعبئة الداتاغريدفيو باسماء قواعد البيانات' dataGridView1.DataSource = Cls.FindDatabaseByName(Txt_DBName.Text) End If End If End If End If End Sub
شرح كود البحث عن قاعدة البيانات في السرفير :
PHP كود :
''' <summary> ''' كود التاكد من وجود قاعدة البيانات في السيرفير ''' </summary> ''' <param name="YourDbName">اسم قاعدة البيانات</param> ''' <returns>الفودة في قيمة True في حال وجد قاعدة البيانات اي لا يجب عمل اتاش او العكس</returns> ''' <remarks>شركة العاصم للبرمجيات https://asemshahen5.blogspot.com/ </remarks> Public Function GetAttachDatabaseName(YourDbName As String) As Boolean 'تعريف داتا تيبل' Dim DT As New DataTable 'كود نص الاتصال الخاص بالبحث في اسماء قواعد البيانات' Dim SqlConnection1 As New SqlClient.SqlConnection("Data Source=(Local)\sqlexpress" & ";Initial Catalog=tempdb;Integrated Security=SSPI;") 'استعلام خاص بالبحث عن اسم قاعدة البيانات في السيرفير' Dim Str As String = "Select DISTINCT name from master.dbo.sysdatabases where name Like '" & YourDbName & "' and has_dbaccess(Name) = 1 " 'تعريف داتا ادبتر مع وضع كود الاستعلام و الاتصال' Dim ADP As New SqlClient.SqlDataAdapter(Str, SqlConnection1) 'تفريغ الداتا تيبل' DT.Clear() 'تعبئة الداتا تيبل من نتيجة الاستعلام' ADP.Fill(DT) 'تعريف متغير يحمل نتيجة الاستعلام' Dim i As Integer = DT.Rows.Count 'في حال كان المتغير 0 يعني قاعدة البيانات غير متصلة' If i = 0 Then MessageBox.Show(" قاعدة البيانات 'قاعدة بيانات البرنامج'" + "غير متصلة بالسرفر جارى عمل الاتصال", Environment.MachineName, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) 'العودة بقيمة False في حال عدم وجود لاسم قاعدة البيانات في السيرفير Return False Else 'العودة بقيمة True في حال اتصال قاعدة البيانات في السيرفير' Return True End If End Function
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
تعليم تنصيب سيكول سيرفير اكسبريس :
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 20
المواضيع 8
الإنتساب : Nov 2019
السمعة :
0
الشكر: 1
تم شكره 17 مرات في 15 مشاركات
(26-11-19, 02:49 PM)asemshahen5 كتب : لعمل اتاش استخدم اسم قاعدة البيانات في نص الاتصال ماستر اي يوجد نص اتصال خاص بعمل الاتاش ليس له علاقة بنص الاتصال الخاص بقاعدة بيانات البرنامج .
هذا الكود مشروح :
PHP كود :
''' <summary> ''' عمل اتاش لقاعدة البيانات ''' </summary> ''' <param name="MYDBNAME">اسم قاعدة البيانات</param> ''' <param name="f1lepathprimary">مكان و اسم ملف mdf</param> ''' <param name="f1lepathlog">مكان و اسم الملف log</param> ''' <returns>العودة بقيمة True في حال النجاح و قيمة False في حال الفشل</returns> ''' <remarks>شركة العاصم للبرمجيات https://asemshahen5.blogspot.com/ </remarks> Public Function AttachDatabaseName(MYDBNAME As String, f1lepathprimary As String, f1lepathlog As String) As Boolean Try 'كود الاتصال الخاص بعملية الاتاش' Dim SqlConnection1 As New SqlClient.SqlConnection("Data Source=(Local)\sqlexpress " & ";Initial Catalog=tempdb;Integrated Security=SSPI;") 'تعريف سيكول كوماند' Dim CMD As New SqlClient.SqlCommand() 'نوع الكوماند تيكست اي استعلام' CMD.CommandType = CommandType.Text 'تحديد كود الاتصال بنص الاتصال الذي في الاعلى' CMD.Connection = SqlConnection1 If SqlConnection1.State = ConnectionState.Closed Then SqlConnection1.Open() 'الاستعلام الخاص بعمل الاتاش' CMD.CommandText = "sp_attach_db " & MYDBNAME & ",'" & f1lepathprimary & "'" & ",'" & f1lepathlog & "'" 'الاستعلام الخاص بعمل الاتاش' '' OR CMD.CommandText = "CREATE DATABASE " + MYDBNAME + " ON (FILENAME = '" & f1lepath & "')FOR ATTACH" 'تنفيذ الاستعلام' CMD.ExecuteNonQuery() 'اغلاق الاتصال' SqlConnection1.Close() SqlConnection1.Dispose() 'رسالة تخبر بنجاح عملية الاتاش' MessageBox.Show("تم انشاء اتصال قاعدة البيانات بالسرفر ", "Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading) 'العودة بقيمة True' Return True Catch ex As Exception 'رسالة تفيد بفشل عملية الاتاش و سبب الخطء' MessageBox.Show(ex.Message & vbNewLine & "فشل البرنامج فى انشاء اتصال بقاعدة البيانات بالسرفر", "Attach Database", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading) 'العودة بقيمة False' Return False End Try End Function
شرح كود الاستدعاء الخاص بالزر :
PHP كود :
'كود الاستدعاء الخاص بعملية الاتاش في زر' Private Sub BtnAttachDatabase_Click(sender As Object, e As EventArgs) Handles BtnAttachDatabase.Click 'تعريف متغير صندوق حوار فتح' Dim openfd As New OpenFileDialog 'الفلتر على نوع قاعدة البيانات mdf' openfd.Filter = "Sql Server Database(*.mdf)|*.mdf" 'عنوان صندوق الحوار فتح' openfd.Title = "Attach Database" 'التاكد من اختيار موافق لتلافي حصول خطا' If openfd.ShowDialog = DialogResult.OK Then 'التاكد من عدم وجود قاعدة البيانات' If (Cls.GetAttachDatabaseName(Txt_DBName.Text) = False) Then 'تعريف متغير نصي فيه اسم قاعدة البيانات' Dim SafeFileName As String = openfd.SafeFileName 'حذف لاحقة اسم قاعدة البيانات' SafeFileName = SafeFileName.Replace(".mdf", "") 'تعريف متغير نصي فيه اسم و عنوان قاعدة البيانات' Dim DBName As String = openfd.FileName 'استبدال لاحقة mdf من اسم و عنوان قاعدة البيانات بلاحقة log' DBName = DBName.Replace(".mdf", "_log.ldf") 'وضع اسم ومسار ملف اللوغ في ليبل' Lbl_DBPath_LDF.Text = DBName 'وضع اسم و ملف الـ mdf في ليبل اخر' Lbl_DBPath_MDF.Text = openfd.FileName 'رسالة تاكد من عمل الاتاش' If MessageBox.Show("Are You Sure Attach Database File : " & openfd.FileName, "Attach Database", MessageBoxButtons.YesNo) = DialogResult.Yes Then 'عمل شرط في حال نجاح عملية الاتاش' If (Cls.AttachDatabaseName(SafeFileName, openfd.FileName, DBName) = True) Then 'اعادة تعبئة الداتاغريدفيو باسماء قواعد البيانات' dataGridView1.DataSource = Cls.FindDatabaseByName(Txt_DBName.Text) Else 'اعادة تعبئة الداتاغريدفيو باسماء قواعد البيانات' dataGridView1.DataSource = Cls.FindDatabaseByName(Txt_DBName.Text) End If End If End If End If End Sub
شرح كود البحث عن قاعدة البيانات في السرفير :
PHP كود :
''' <summary> ''' كود التاكد من وجود قاعدة البيانات في السيرفير ''' </summary> ''' <param name="YourDbName">اسم قاعدة البيانات</param> ''' <returns>الفودة في قيمة True في حال وجد قاعدة البيانات اي لا يجب عمل اتاش او العكس</returns> ''' <remarks>شركة العاصم للبرمجيات https://asemshahen5.blogspot.com/ </remarks> Public Function GetAttachDatabaseName(YourDbName As String) As Boolean 'تعريف داتا تيبل' Dim DT As New DataTable 'كود نص الاتصال الخاص بالبحث في اسماء قواعد البيانات' Dim SqlConnection1 As New SqlClient.SqlConnection("Data Source=(Local)\sqlexpress" & ";Initial Catalog=tempdb;Integrated Security=SSPI;") 'استعلام خاص بالبحث عن اسم قاعدة البيانات في السيرفير' Dim Str As String = "Select DISTINCT name from master.dbo.sysdatabases where name Like '" & YourDbName & "' and has_dbaccess(Name) = 1 " 'تعريف داتا ادبتر مع وضع كود الاستعلام و الاتصال' Dim ADP As New SqlClient.SqlDataAdapter(Str, SqlConnection1) 'تفريغ الداتا تيبل' DT.Clear() 'تعبئة الداتا تيبل من نتيجة الاستعلام' ADP.Fill(DT) 'تعريف متغير يحمل نتيجة الاستعلام' Dim i As Integer = DT.Rows.Count 'في حال كان المتغير 0 يعني قاعدة البيانات غير متصلة' If i = 0 Then MessageBox.Show(" قاعدة البيانات 'قاعدة بيانات البرنامج'" + "غير متصلة بالسرفر جارى عمل الاتصال", Environment.MachineName, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading) 'العودة بقيمة False في حال عدم وجود لاسم قاعدة البيانات في السيرفير Return False Else 'العودة بقيمة True في حال اتصال قاعدة البيانات في السيرفير' Return True End If End Function
اخي انا اريد عند فتح البرنامج لاول مره..
يقوم البرنامج بعمل attach لقاعدة البيانات تلقائيا و الاتصال بها..
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
27-11-19, 10:18 AM
(آخر تعديل لهذه المشاركة : 27-11-19, 10:20 AM {2} بواسطة asemshahen5.)
ضع هذا الكود :
PHP كود :
''ضع هذا السب في الفورم الذي يعمل عند بدء تشغيل البرنامج :
Private Sub FormXT_Load(DatabaseNameForAttach As String) Dim openfd As New OpenFileDialog openfd.Filter = "Sql Server Database(*.mdf)|*.mdf" openfd.Title = "Attach Database" If (Cls.GetAttachDatabaseName(DatabaseNameForAttach) = False) Then If openfd.ShowDialog = DialogResult.OK Then Dim SafeFileName As String = openfd.SafeFileName SafeFileName = SafeFileName.Replace(".mdf", "") Dim DBName As String = openfd.FileName DBName = DBName.Replace(".mdf", "_log.ldf") If MessageBox.Show("Are You Sure Attach Database File : " & openfd.FileName, "Attach Database", MessageBoxButtons.YesNo) = DialogResult.Yes Then If (Cls.AttachDatabaseName(SafeFileName, openfd.FileName, DBName) = True) Then My.Settings.MdfFile = openfd.FileName My.Settings.LdfFile = DBName My.Settings.Save() Else My.Settings.MdfFile = "" My.Settings.LdfFile = "" My.Settings.Save() End If End If End If End If End Sub
'في السيتنغ عرف متغيرين باسم : '1- MdfFile
'2- LdfFile
'و في حدث تحميل الفورم ضع الكود التالي :
FormXT_Load("ضع هنا اسم قاعدة البيانات الخاصة بالبرنامج")
'لا تنسى إضافة الكلاس AttachDatabaseNameCls الى برنامجك .
'موفق ان شاء الله .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
|