ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

کمک!

 
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET
View previous topic :: View next topic  
Author Message
kar
مهمون يكي دو روزه


Joined: 10 Aug 2006
Posts: 24
Location: Shiraz

PostPosted: Fri Sep 22, 2006 7:07 pm    Post subject: کمک! Reply with quote

با سلام
حدودا یک هفته است که که در کار با پایگاه داده vb.net دچار مشکل شدم و هیچ کسی نتونسته کمکم کنه و کلی وقتم تلف شده ممکنه تو این بخش سوالم رو بپرسم؟
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Fri Sep 22, 2006 11:17 pm    Post subject: Reply with quote

به جای سوال این کلاس رو تو پروژه اضافه کن
البته مال من نیست برای همین اسم فامیل روشه
وقتی این کلاس رو به پروژه اضافه کردی فقط کافیه دستورات زیر رو بنویسی
برو حال کن

'   ************************************************************************************
'                               In the name of god
'                   This Class Help you to use ADO.Net 2.0
'                               Provider: Niloufar
'   ************************************************************************************


Imports System
Imports System.Data

Public Class clsADO
    'Public part

    ''' <summary>
    ''' This Constractor is for MsAccess DataBases
    ''' </summary>
    ''' <param name="strPathAndFileName">MsAccess DataBase full file name (Path\FileName)</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strPathAndFileName As String)
        DataBaseType = DataBaseTypes.MsAccess
        strlocalPathAndFileName = strPathAndFileName
    End Sub

    ''' <summary>
    ''' This constractor is for MsSqlServer DataBases
    ''' </summary>
    ''' <param name="strServerName">MsSqlServer Server Name</param>
    ''' <param name="strDataBaseName">DataBase Name</param>
    ''' <param name="strUserId">User Id</param>
    ''' <param name="strPassword">Password</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strServerName As String, ByVal strDataBaseName As String, ByVal strUserId As String, ByVal strPassword As String)
        DataBaseType = DataBaseTypes.MsSqlServer
        strlocalServerName = strServerName
        strlocalDataBaseName = strDataBaseName
        strlocalUserId = strUserId
        strlocalPassword = strPassword
    End Sub

    ''' <summary>
    ''' This constractor is for Oracle DataBases
    ''' </summary>
    ''' <param name="strSID">Oracle System Identifier</param>
    ''' <param name="strUserId">User Id</param>
    ''' <param name="strPassword">Password</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strSID As String, ByVal strUserId As String, ByVal strPassword As String)
        DataBaseType = DataBaseTypes.Oracle
        strlocalSID = strSID
        strlocalUserId = strUserId
        strlocalPassword = strPassword
    End Sub

    ''' <summary>
    ''' Dispose this class
    ''' </summary>
    ''' <param name="Disposing">Set to TRUE if you want to dispose any objects used in this class and set them to nothing</param>
    ''' <remarks></remarks>
    Public Overloads Sub Dispose(ByVal Disposing As Boolean)
        If Not Me.Disposed Then
            If Disposing Then
                If Not objConnection Is Nothing Then
                    If objConnection.State <> ConnectionState.Closed Then
                        objConnection.Close()
                    End If
                    objConnection.Dispose()
                    objConnection = Nothing
                End If
                If Not objCommand Is Nothing Then
                    objCommand.Dispose()
                    objCommand = Nothing
                End If
                If Not objDataAdapter Is Nothing Then
                    objDataAdapter.Dispose()
                    objDataAdapter = Nothing
                End If
                Me.Disposed = True
            End If
        End If
    End Sub

    ''' <summary>
    ''' Get a DataTable object by a text query
    ''' </summary>
    ''' <param name="strQuery">SELECT query that you want to fill DataTable by this query</param>
    ''' <returns>DataTable object filled by entered query</returns>
    ''' <remarks></remarks>
    Public Function GetDataTableByQuery(ByVal strQuery As String) As DataTable
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.Text
        InitializeCommand(strQuery)
        Try
            objDataAdapter = New OleDb.OleDbDataAdapter(objCommand)
            Dim objDataTable As New DataTable
            objDataAdapter.Fill(objDataTable)
            Return (objDataTable)
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' Execute any text query (Select, Insert, Update, Delete) and return the number of rows affected by this query
    ''' </summary>
    ''' <param name="strQuery">Text query that you want to execute it</param>
    ''' <returns>The number of rows affected by entered query</returns>
    ''' <remarks></remarks>
    Public Function ExecuteQuery(ByVal strQuery As String) As Integer
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.Text
        InitializeCommand(strQuery)
        Try
            ExecuteQuery = objCommand.ExecuteNonQuery
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' You should call this sub befor getting DataTable or execute StoredProecedure for adding parameters of StoredProcedure
    ''' </summary>
    ''' <param name="SPName">StoredProcedure Name that you want Execute it</param>
    ''' <remarks></remarks>
    Public Sub InitializeStoredProcedure(ByVal SPName As String)
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.StoredProcedure
        InitializeCommand(SPName)
    End Sub

    ''' <summary>
    ''' Add a Parameter of StoredProcedure. Note: you should call the InitializeStoredProcedure sub befor using this sub
    ''' </summary>
    ''' <param name="Name">Parameter name</param>
    ''' <param name="Type">Parameter type</param>
    ''' <param name="Size">Parameter size</param>
    ''' <param name="Value">Parameter value</param>
    ''' <remarks></remarks>
    Public Sub AddParameter(ByVal Name As String, ByVal Type As OleDb.OleDbType, ByVal Size As Integer, ByVal Value As Object)
        Try
            objCommand.Parameters.Add(Name, Type, Size).Value = Value
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    ''' <summary>
    ''' Get DataTable Object by Execute the StoredProcedure that you enter it in the InitializeStoredProcedure sub. Note: you should call the InitializeStoredProcedure sub befor using this function
    ''' </summary>
    ''' <returns>DataTable object filled by entered StoredProcedure</returns>
    ''' <remarks></remarks>
    Public Function GetDataTableByStoredProcedure() As DataTable
        Try
            objDataAdapter = New OleDb.OleDbDataAdapter(objCommand)
            Dim objDataTable As New DataTable
            objDataAdapter.Fill(objDataTable)
            Return (objDataTable)
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' Execute the StoredProcedure that you enter it in the InitializeStoredProcedure sub. Note: you should call the InitializeStoredProcedure sub befor using this function
    ''' </summary>
    ''' <returns>The number of rows affected by entered StoredProcedure</returns>
    ''' <remarks></remarks>
    Public Function ExecuteStoredProcedure() As Integer
        Try
            ExecuteStoredProcedure = objCommand.ExecuteNonQuery
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function
    'Private part

    Private Enum DataBaseTypes As Byte
        MsAccess = 1
        MsSqlServer = 2
        Oracle = 3
    End Enum

    Private CommandType As CommandType = CommandType.Text

    Private Disposed As Boolean
    Private DataBaseType As DataBaseTypes
    Private strlocalPathAndFileName As String
    Private strlocalServerName As String
    Private strlocalDataBaseName As String
    Private strlocalSID As String
    Private strlocalUserId As String
    Private strlocalPassword As String

    Private objConnection As OleDb.OleDbConnection
    Private objCommand As OleDb.OleDbCommand
    Private objDataAdapter As OleDb.OleDbDataAdapter

    Private Sub OpenMsAccessConnection(ByVal strPathAndFileName As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
                                            "Data Source=" & strPathAndFileName & ";"
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub OpenMsSqlServerConnection(ByVal strServerName As String, ByVal strDataBaseName As String, ByVal strUserId As String, ByVal strPassword As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=SQLOLEDB;" & _
                                            "Data Source=" & strServerName & ";" & _
                                            "DataBase=" & strDataBaseName & ";" & _
                                            "User ID=" & strUserId & ";" & _
                                            "Password=" & strPassword & ";"
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub OpenOracleConnection(ByVal strSID As String, ByVal strUserId As String, ByVal strPassword As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=MSDAORA;" & _
                                            "Data Source=" & strSID & ";" & _
                                            "User ID=" & strUserId & ";" & _
                                            "Password=" & strPassword & ";"
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub InitializeCommand(ByVal strQueryOrSPName As String)
        Try
            objCommand = New OleDb.OleDbCommand(strQueryOrSPName, objConnection)
            objCommand.CommandType = CommandType
        Catch ex As Exception
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Sub
End Class
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Fri Sep 22, 2006 11:42 pm    Post subject: Reply with quote

برای اضافه کردن این کلاس به پروژه فقط کافیه از منوی Projectگزینه New Item رو بزنی بعد Class رو انتخاب کنی
کد داخل کلاس رو پاک کن جاش این کدها رو کپی پیست کن
در نهایت هم یک شی از نوع این کلاس می سازی
اگه دیتابیست Access هستش فقط کافیه آدرس فایل mdb.* رو بدونی و به جای آدرس زیر بزاری
Dim cls As New clsADO("C:\a.mdb")

بعد برای گرفتن گزارش می تونی از تابع استفاده کنی
        Try
            Dim da As DataTable
            da = cls.GetDataTableByQuery("sel_ect * fr.om a")
            MsgBox(da.Rows(0)(0).ToString)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

برای اضافه کردن و یا بروز رسانی یا حتی حذف دیتا از دیتا بیس هم از تابع زیر استفاده کن

Try
            cls.ExecuteQuery("ins_ert into a (id,name) values(1,'Parsx')")
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
Back to top
kar
مهمون يكي دو روزه


Joined: 10 Aug 2006
Posts: 24
Location: Shiraz

PostPosted: Sat Sep 23, 2006 1:35 pm    Post subject: با سلام دوباره Reply with quote

با تشکر .
کلاس جالبيه اما اگه ممکنه يه نگاه به مشکل من بکن فکر کنم براحتي قابل حل باشه.
من يه فرم دارم که روي آن يک جعبه متن به نام textbox1 و يک ديتاگريد به نام datagrid1 قرار داره.(به اضافه يک دکمه)
بعد از مراحل مربوط به data connection و اتصال پايگاه داده به برنامه يه کنترل OledbDataAdapter به نام OledbDataAdapter1 به فرم اضافه کردم همان طور که ميدوني در يک مرحله از ويزارد بايد sql نويسي کنيم (در اينجا من ميخوام تنها سطر هايي در datagrid نمايش داده شود که مثلا فيلد phone از جدول table1 برابر textbox1.text باشه) اين کد ها رو نوشتم ولي جواب نميده:
Back to top
kar
مهمون يكي دو روزه


Joined: 10 Aug 2006
Posts: 24
Location: Shiraz

PostPosted: Sat Sep 23, 2006 2:31 pm    Post subject: ؟؟؟؟؟ Reply with quote

نمی دونم چرا هر کاری میکنم در موقع post کردن کد ها یک صفحه سفید میاد و نوشته:

Forbidden

You don't have permission to access /posting.php on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Back to top
kar
مهمون يكي دو روزه


Joined: 10 Aug 2006
Posts: 24
Location: Shiraz

PostPosted: Sat Sep 23, 2006 5:37 pm    Post subject: Reply with quote

فهمیدم مشکل post نشدن چیه!این هم از کدها:

SE_LECT *
 FR_OM Table1
 WHE_RE (phone = ' +textbox1.[text]+ ')


البته مطمئنم اشکال کار فقط در همان بخش textbox1.text هست .چون توي حالت هاي ديگه هيچ مشکلي نيست و بقیه کار ها را به درستی انجام دادم.

مثلا اگر بنويسم:
 WH_ERE (phone = '222223')

برنامه درست کار مي کنه!!!(یعنی اگه این شماره تلفن در رکورد ها وجود داشت آن رکورد را در datagrid نمایش میدهد)

خواهش مي کنم اين مشکل رو حل کنيد.(بازم يادآوري کنم مشکل فقط همان بخشي است که گفتم.)
با سپاس فراوان.
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sat Sep 23, 2006 9:13 pm    Post subject: Reply with quote

طبق گفته شما در مورد وصل شدن به دیتابیس و اجرای دستورات مشکلی ندارید
برای اینکه یه همچین دستوری بنویسی این شکلی کد SQL رو بساز

Dim SQL As String
        SQL = "sel_ect * fro.m Table1 where phone='" & TextBox1.text & "' "

اینم یادت باشه که تک کتیشن ' علامت رشته تو SQL هستش ولی علامت رشته تو برنامه نویسی VB.Net با دبل کتیشن " هستش
Back to top
kar
مهمون يكي دو روزه


Joined: 10 Aug 2006
Posts: 24
Location: Shiraz

PostPosted: Sat Sep 23, 2006 10:08 pm    Post subject: Reply with quote

من برنامه ام رو با قرار دادن يک کنترل oledbdataAdapter و طي کردن مراحل ويزارد آن درست کردم و کدي که گفتي در اون مرحله وارد کردم اما جواب نميده (البته دبل کوتيشن هاي ابتدا و انتها را برداشتم)
با اضافه کردن کنترل oledbdataAdapter تو يه برنامه کوچولو و طي کردن مراحل ويزارد مخصوصا مرحله sql نويسيش متوجه حرف من ميشي.
البته مي دونم اين يه روش آماتوريه ولي من نه روش انجام اون با کد نويسي رو بلدم و نه يه منبع که با زبان ساده اين مباحث رو توضيح داده باشه پيدا کردم.
اگه کمکم کني خيلي ممنون ميشم. Wink
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Sep 24, 2006 7:56 pm    Post subject: Reply with quote

اگه از دات نت 2003 استفاده مي كني توي بخش كدها initial مقدار دهي datagrid ‌بخش دستور sql رو مي توني پيدا كني و اونجا مي توني به راحتي textbox1.text رو مشخص كني ...
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum