منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : ارجوا فى المساعدة فى الاستعلام عن طريق ويب سيفر
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
قمت بأنشاء كود لدخول برنامجي بصلحيات معينة وعند شاشة الدخول ( اسم المستخدم , وكلمة المرور )

وقمت بعمل دالة للاستعلام عن اسم المستخدم وكلمة المرور في ويب سيرفيس وترجع قمية الاستعلام 

PHP كود :
   <WebMethod()>
 
   Public Function selectLogen(Username As StringPassword As String) As Integer
      
            Dim cmd 
As New SqlCommand()
 
           If CON.State ConnectionState.Open Then
                CON
.Close()
 
           End If
 
           CON.Open()
 
           cmd.Connection CON
            cmd
.CommandText "SELECT * FROM dbo.Users WHERE (UserName LIKE '" Username "') AND (Password LIKE '" Password "')"
 
           If CON.State ConnectionState.Open Then
                CON
.Close()
 
           End If
 
           CON.Open()
 
           Return cmd.ExecuteNonQuery 


ثم قمت باستدعئها في الفورم الخاصة بها واستخدام الدالة

PHP كود :
Dim i As New ServiceReference1.WebService1SoapClient
 
If i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text) > 0 Then
   Dim Mainform 
As New MainFrm2
            Mainform
.Show()
 
           Me.Hide()
 
      Else
 
           MessageBox.Show("برجاء التأكد من البيانات"APPLICATIONNAMEMessageBoxButtons.OKMessageBoxIcon.Error)
 
           PasswordTextBox.ResetText()
 
           UsernameTextBox.ResetText()
 
           UsernameTextBox.Focus()
 
       End If 
المشكلة هنا لا توجد نتيجة ترجع من الاستعلام الموجود في الويب سيرفيس وتظهر لي رسالة ( برجاء التاكد من البيانات ) في حين ان اسم المستخدم صحيح وكلمة السر
فهل من المساعدة جزاكم الله كل خير
تحتاج تعديل بسيط في جانب الويب سيرفس
وهي اذا اردت عدد السجلات  فاستخدم جملة استعلام  (*)select  count
وترجع بـ executescalar وليس  ExecuteNonQuery
اشكر اخي سعود تمت بنجاح الحمد لله لكن بدون استخدام صلحيات المستخدم
PHP كود :
Name CurDataTable.Rows(0)(1)
 
           FiledAdd CurDataTable.Rows(0)(2)
 
           FiledUpdate CurDataTable.Rows(0)(3)
 
           FiledSave CurDataTable.Rows(0)(4)
 
           FiledDelete CurDataTable.Rows(0)(5
رجعت قيم الاسم وكلمة المرور فقط
العفو ياطيب
كيف كتبت الاستعلام؟
اذا مثل التعديل اللي قلت لا اظن يرجع قيم نصية وانما فقط قيمة رقمية تمثل العدد فقط
لو حبيت قيم نصية استخدم ارجاع DataTable وفي الجهاز المحلي تعرف DataTable وتتم التعبئة ..
الطرق كثيرة.
PHP كود :
   <WebMethod()>
 
   Public Function selectLogen(Username As StringPassword As String) As DataTable
        Try
            CON 
= New SqlConnection(ConString)
 
           Dim da As New SqlDataAdapter("SELECT Count(*) FROM dbo.Users WHERE (UserName LIKE '" Username "') AND (Password LIKE '" Password "')"CON)
 
           Dim dt As New DataTable
            dt
.TableName "Users"
 
           da.Fill(dt)
 
           Return dt
        Catch ex 
As Exception
            Throw 
New SoapException(ex.MessageSoapException.ServerFaultCodeContext.Request.Url.AbsoluteUri)
 
       End Try
 
   End Function 

PHP كود :
       If i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows.Count 0 Then

            Name 
i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows(0)(1)
 
           FiledAdd i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows(0)(2)
 
           FiledUpdate i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows(0)(3)
 
           FiledSave i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows(0)(4)
 
           FiledDelete i.selectLogen(UsernameTextBox.TextPasswordTextBox.Text).Rows(0)(5)

 
           Dim Mainform As New MainFrm2
            Mainform
.Show()
 
           Me.Hide()
 
       Else
            MessageBox
.Show("برجاء التأكد من البيانات"APPLICATIONNAMEMessageBoxButtons.OKMessageBoxIcon.Error)
 
           PasswordTextBox.ResetText()
 
           UsernameTextBox.ResetText()
 
           UsernameTextBox.Focus()
 
       End If
 
   End Sub 
الان الامر تغير
ارجع للكود الاول وليس:

كود :
SELECT Count(*)

 بل اجعله هكذا
كود :
select * from
وعبء الداتاتيبل هكذا
كود :
dt.load(cm.executereader)
وارجع الداتاتيبل
وبالجهاز المحلي افحص صفوف الداتاتيبل
dt.rows.count
وابد بالاسنادات

فين راح الردSmile
هو على اساس انك تستخدم sqlcommand  لكن لم انتبه انك تستخدم sqldataadapter    ولا مشكلة المهم جملة الاستعلام واحدة  سواءا هكذا او غيرها
مشكور اخي سعود ضبط الموضوع كنت دخلت يوزر له جميع الصلحيات كدا تمام جزاك الله كل خير عنا

PHP كود :
   <WebMethod()>
 
   Public Function selectLogen(Username As StringPassword As String) As DataTable
        Try
            CON 
= New SqlConnection(ConString)
 
           Dim da As New SqlDataAdapter("SELECT * FROM dbo.Users WHERE (UserName LIKE '" Username "') AND (Password LIKE '" Password "')"CON)
 
           Dim dt As New DataTable
            dt
.TableName "Users"
 
           da.Fill(dt)
 
           If CON.State ConnectionState.Open Then
                CON
.Close()
 
           End If
 
           CON.Open()
 
           dt.Load(da.SelectCommand.ExecuteReader)
 
           Return dt
        Catch ex 
As Exception
            Throw 
New SoapException(ex.MessageSoapException.ServerFaultCodeContext.Request.Url.AbsoluteUri)
 
       End Try
 
   End Function 

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

كود :
da.Fill(dt)

مباشرة اكتب 
Return dt

إقتباس :مشكور اخي سعود ضبط الموضوع كنت دخلت يوزر له جميع الصلحيات كدا تمام جزاك الله كل خير عنا
العفو ياطيب
لكن دقق بالكود فيه اضافات مالها لازم (اذا لم اخطيء)
مثل التعبئة  فقد عبأت مرتين عن طريق 

كود :
da.fill(dt)

 و 
كود :
dt.Load(da.SelectCommand.ExecuteReader)
صحيح لم انتبة من فرحتي بتشغيل الكود اخيرا شكرا لك
ملاحظة بسيطة على الاستعلام
بما أنك تستعلم على بيانات الدخول وهي بيانات حساسة فالافضل استخدام = بدلا من like
الصفحات : 1 2