Dzialanie klasy db

0

Poniżej znajduje się kod klasy odpowiedzialnej za polaczenia z baza danych w VB.net.
Prosił bym o wytulaczenie jak z tego skorzystac, ale dostaje informacje, że Open nie jest członkiem elementu DB. Co z tym fantem zrobic? Jak się do tego dostac?

Chce to wywołac na zasadzie:


Try
            Dim db As New DB("moj connection string")
            db.Open();
            db.ExecuteNonQuery("select * from tabela", db)

        Catch ex As Exception

        End Try

Ale nie mam

Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
Imports System.Collections.Generic


Public Class sql

    Private _connectionString As String = My.Settings.sqlConnection

    'Public Sub New(connectionString As String)
    '    _connectionString = connectionString
    'End Sub

    Public Sub ExecuteNonQuery(cmdTxt As String, params As Dictionary(Of String, Object))
        Using cmd As SqlCommand = BuildCommand(cmdTxt, params)
            cmd.ExecuteNonQuery()
        End Using
    End Sub

    Public Function ExecuteReader(cmdTxt As String, params As Dictionary(Of String, Object)) As SqlDataReader
        Using cmd As SqlCommand = BuildCommand(cmdTxt, params)
            Return cmd.ExecuteReader()
        End Using
    End Function

    Public Function ExecuteScalar(cmdTxt As String, params As Dictionary(Of String, Object)) As Object
        Using cmd As SqlCommand = BuildCommand(cmdTxt, params)
            Return cmd.ExecuteScalar()
        End Using
    End Function

    Private Function BuildCommand(cmdTxt As String, params As Dictionary(Of String, Object)) As SqlCommand
        Using con As New SqlConnection(_connectionString)
            Using cmd As SqlCommand = con.CreateCommand()
                cmd.CommandType = CommandType.StoredProcedure
                cmd.CommandText = cmdTxt
                AddParameters(cmd, params)
                con.Open() 'working on the assumption this command will be run as soon as it's retuned; so this open is left as late as possible but here to avoid duplicate code
                Return cmd
            End Using
        End Using
    End Function

    Private Sub AddParameters(ByRef cmd As SqlCommand, params As Dictionary(Of String, Object))
        If Not params Is Nothing Then
            For Each kvp As KeyValuePair(Of String, Object) In params
                cmd.Parameters.AddWithValue(kvp.Key, kvp.Value)
            Next
        End If
    End Sub

End Class
0

na zasadzie napisania selecta, uzyc tej klasy po prostu..

0

Nie możesz zrobić db.Open(), bo klasa DB nie zawiera metody Open.

Ale zauważ, że BuildCommand robi Open pod spodem (dla swojego obiektu SqlConnection), więc wystarczy:

Dim db As New DB("moj connection string")
Dim result As db.ExecuteReader("select * from tabela", db)

Gdzie musisz zrobić ExecuteReader, bo to ci zwróci obiekt, na którym możesz czytać wynik, a ExecuteNonQuery po prostu zrobi zapytanie, która w założeniu nie jest zapytaniem wybierającym i nie odda żadnych wyników.

1 użytkowników online, w tym zalogowanych: 0, gości: 1