31-08-18, 10:01 PM
السلام عليكم ورحمة الله وبركاته
لاحظت اخوانى ان بعض بعض الاعضاء يسئل عن عمل اتتاتش للداتا بيز اما عن طريق التحزيم او بطرق اخرى لكن حبيت اكتب طريقة اعمل بها من سنوات
وهى طريقة مناسبة جدا لانها لا تجعل العميل يقوم باى خطوات لعمل اتتاتش ولا يفعل اى شيئ غير انه يفتح البرنامج
اولا : يجب ارفاق الداتا بيز بمسار المشروع ويفضل ان تكون بمجلد منفصل للترتيب فقط
مثلا المجلد باسم db بجانب الملف التنفيذى
ثانيا : سوف نضيف بالفروم الذى يفتح اولا وليكن فروم login نضيف 2 فانكشن
نلاحظ ان المتغير str به اسم قاعدة بياناتك ....
نقوم فقط بتغيره لاسم الداتا بيز الخاصة بك كما هو داخل ''
ثم نقوم بإضافة الميثود التالى
ولا نغير بها اى شيئ التغير الوحيد فقط فى اسم الداتا بيز بالفنكشن الاولى..
هذه الاكواد هى المسئولة عن عمل اتتاتش للداتا بيز
لاستخدام هذه الاكواد فقط نكتب هذا الكود فى حدث اللود فروم للفروم الى بيفتح اولا كما قلنا سابقا
فرضا اسم قاعدة البيانات database
يكون اسمها بين علامات "" فى الاول
ثم بمسار البرنامج نكتب اسمها بالمسار + الامنتداد
ثم نكتب اسم ملف اللوج بالامنتداد كما هو موضح سابقا فى الكود
الان نقوم بعمل تجربة وقاعدة البيانات غير مشبوكة بالسيرفر
ستظهر رسالة تقول لك ان الداتا بيز غير متصلة بالسيرفر من الفنكشن الاولى بعد الظغط على اوك سنجد ان الداتا بيز تم شبكها بالسيرفر
ويمكن التأكد من ssms
ملحوظة : نلاحظ ان الفنكشن من نوع Boolean والسبب هو ان كانت الداتا بيز متصلة لا يقوم بتنفيذ الكود اما ان لم تكن متصلة يقوم بالتنفيذ
: يجب كتابة الكود الخاص باللود فروم اعلى الحدث قبل اى اكواد اخرى خاصة بالداتا بيز او الاستعلامات الاخرى لتجنب اى اكسبشن فى الرن تايم
فى النهاية اسئلكم الدعاء بظهر الغيب
تحياتى لكم جميعا
لاحظت اخوانى ان بعض بعض الاعضاء يسئل عن عمل اتتاتش للداتا بيز اما عن طريق التحزيم او بطرق اخرى لكن حبيت اكتب طريقة اعمل بها من سنوات
وهى طريقة مناسبة جدا لانها لا تجعل العميل يقوم باى خطوات لعمل اتتاتش ولا يفعل اى شيئ غير انه يفتح البرنامج
اولا : يجب ارفاق الداتا بيز بمسار المشروع ويفضل ان تكون بمجلد منفصل للترتيب فقط
مثلا المجلد باسم db بجانب الملف التنفيذى
ثانيا : سوف نضيف بالفروم الذى يفتح اولا وليكن فروم login نضيف 2 فانكشن
كود :
Public Shared Function GETATTACHDATABASENAME() As Boolean
On Error Resume Next
Dim DS As New DataSet
Dim SqlConnection1 As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=" + My.Computer.Name & "\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 SqlClient.SqlDataAdapter
ADP = New SqlClient.SqlDataAdapter(str, SqlConnection1)
DS.Clear()
ADP.Fill(DS)
Dim i As Integer
If DS.Tables(0).Rows.Count = 0 Then
GETATTACHDATABASENAME = False
MessageBox.Show(" قاعدة البيانات 'قاعدة بيانات البرنامج'" & "غير متصلة بالسرفر جارى عمل الاتصال", My.Computer.Name, MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading)
Else
GETATTACHDATABASENAME = True
End If
ADP.Dispose()
SqlConnection1.Dispose()
End Function
نلاحظ ان المتغير str به اسم قاعدة بياناتك ....
كود :
where name Like 'YourDbName'
ثم نقوم بإضافة الميثود التالى
كود :
Public Shared Sub ATTACHDATABASENAME(ByVal MYDBNAME As String, ByVal f1lepathprimary As String, ByVal f1lepathlog As String)
Try
Dim SqlConnection1 As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=" + My.Computer.Name & "\SQLEXPRESS" + ";Initial Catalog=tempdb;Integrated Security=SSPI;")
Dim CMD As SqlClient.SqlCommand = New SqlClient.SqlCommand
CMD.CommandType = CommandType.Text
CMD.Connection = SqlConnection1
If SqlConnection1.State = ConnectionState.Open Then SqlConnection1.Close()
SqlConnection1.Open()
CMD.CommandText = "sp_attach_db " & MYDBNAME & ",'" & f1lepathprimary & "'" & ",'" & f1lepathlog & "'"
' OR CMD.CommandText = "CREATE DATABASE " & MYDBNAME & " ON (FILENAME = '" & f1lepath & "')FOR ATTACH"
CMD.ExecuteNonQuery()
SqlConnection1.Dispose()
MessageBox.Show("تم انشاء اتصال قاعدة البيانات بالسرفر ", "ATTCH DATABASE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading)
Catch ex As Exception
Dim result As Integer
result = MessageBox.Show("فشل البرنامج فى انشاء اتصال بقاعدة البيانات بالسرفر", "ATTCH DATABASE", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2, MessageBoxOptions.RtlReading)
End Try
End Sub
ولا نغير بها اى شيئ التغير الوحيد فقط فى اسم الداتا بيز بالفنكشن الاولى..
هذه الاكواد هى المسئولة عن عمل اتتاتش للداتا بيز
لاستخدام هذه الاكواد فقط نكتب هذا الكود فى حدث اللود فروم للفروم الى بيفتح اولا كما قلنا سابقا
كود :
If GETATTACHDATABASENAME() = False Then
ATTACHDATABASENAME("database", Application.StartupPath & "\db\database.MDF", Application.StartupPath & "\db\database_log.LDF")
End If
فرضا اسم قاعدة البيانات database
يكون اسمها بين علامات "" فى الاول
ثم بمسار البرنامج نكتب اسمها بالمسار + الامنتداد
ثم نكتب اسم ملف اللوج بالامنتداد كما هو موضح سابقا فى الكود
الان نقوم بعمل تجربة وقاعدة البيانات غير مشبوكة بالسيرفر
ستظهر رسالة تقول لك ان الداتا بيز غير متصلة بالسيرفر من الفنكشن الاولى بعد الظغط على اوك سنجد ان الداتا بيز تم شبكها بالسيرفر
ويمكن التأكد من ssms
ملحوظة : نلاحظ ان الفنكشن من نوع Boolean والسبب هو ان كانت الداتا بيز متصلة لا يقوم بتنفيذ الكود اما ان لم تكن متصلة يقوم بالتنفيذ
: يجب كتابة الكود الخاص باللود فروم اعلى الحدث قبل اى اكواد اخرى خاصة بالداتا بيز او الاستعلامات الاخرى لتجنب اى اكسبشن فى الرن تايم
فى النهاية اسئلكم الدعاء بظهر الغيب
تحياتى لكم جميعا