تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] عمل اتتاتش للداتا بيز عند فتح البرنامج اول مرة عل جهاز العميل
#1
السلام عليكم ورحمة الله وبركاته

لاحظت اخوانى ان بعض بعض الاعضاء يسئل عن عمل اتتاتش للداتا بيز اما عن طريق التحزيم او بطرق اخرى لكن حبيت اكتب طريقة اعمل بها من سنوات
وهى طريقة مناسبة جدا لانها لا تجعل العميل يقوم باى خطوات لعمل اتتاتش ولا يفعل اى شيئ غير انه يفتح البرنامج

اولا : يجب ارفاق الداتا بيز بمسار المشروع ويفضل ان تكون بمجلد منفصل للترتيب فقط
مثلا المجلد باسم 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 والسبب هو ان كانت الداتا بيز متصلة لا يقوم بتنفيذ الكود اما ان لم تكن متصلة يقوم بالتنفيذ
: يجب كتابة الكود الخاص باللود فروم اعلى الحدث قبل اى اكواد اخرى خاصة بالداتا بيز او الاستعلامات الاخرى لتجنب اى اكسبشن فى الرن تايم

فى النهاية اسئلكم الدعاء بظهر الغيب
تحياتى لكم جميعا
الرد }}}


الردود في هذا الموضوع
عمل اتتاتش للداتا بيز عند فتح البرنامج اول مرة عل جهاز العميل - بواسطة mero5000 - 31-08-18, 10:01 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مثال] طريقة إنشاء قاعدة sql بواسطة script برمجيا وكتابة أسمها بواسطة العميل princelovelorn 9 9,415 26-03-23, 04:24 PM
آخر رد: sanyor77
  [مقال] مشاركة البرنامج على أكثر من جهاز (قاعدة بيانات اكسيس) mr_hso 0 1,361 06-01-23, 05:21 AM
آخر رد: mr_hso

التنقل السريع :


يقوم بقرائة الموضوع: