Announcement

Collapse
No announcement yet.

SQL im VB.NET

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL im VB.NET

    Hallo,

    1. Problem
    ich wil aus VB.NET heraus ein SQL Statement an den SQL Server schicken.
    Das habe ich bisher zusammenbekommen:

    Code:
      Dim zfConnection As String = "Server=OSSUS;Database=ProjektMails;Trusted_Connection=True"
    
            Dim sqlVerbindung = New SqlConnection(zfConnection)
            Dim commandx As New SqlCommand
            commandx.CommandType = CommandType.Text
            commandx.CommandText = "Select * from ProjektMails where online = 1"
    2. Problem
    Ich will das Ergebnis der Abfrage im Formular sehen. Da ist schon ein Datagrid drinn mit der BindingSource: ProjektMailsDataGridView

    Wie stelle ich das geschicktermaßen an?

    Danke!

    Mark B

  • #2
    Am Geschicktesten kann ich nicht liefern.
    Aber von der Stelle aus an der du stehst könntest du jetzt z.B. auf dem SqlCommand einen DataReader öffnen(das SqlCommand hat dafür eine ExecuteReader Methode) und mit diesen DataReader eine Datatable füllen (Die Datatable hat eine Load Methode). Diese Datatable dann an die BindingSource binden.

    Comment


    • #3
      momentaner Stand:

      Code:
              ' Verbindung zur Datenbank herstellen
              Dim myOleDbConnection As New OleDb.OleDbConnection
      
              myOleDbConnection.ConnectionString = "Provider=SQLOLEDB;Server=OSSUS;Database=ProjektMails;Trusted_Connection=True"
      
      
      
              ' SelectCommand erstellen welches die "Select-Abfrage" gegen die
              ' Datenbank beinhaltet
              Dim myOleDbSelectCommand As New OleDb.OleDbCommand
              myOleDbSelectCommand.Connection = myOleDbConnection
              myOleDbSelectCommand.CommandText = "Select * from ProjektMails where online = 1"
      
              ' DataAdapter mit dem SelectCommand verbinden
              Dim myOleDbDataAdapter As New OleDb.OleDbDataAdapter
              myOleDbDataAdapter.SelectCommand = myOleDbSelectCommand
      
              ' und mit dem DataAdapter das DataSet füllen
              Dim myDataSet As New DataSet
              myOleDbDataAdapter.Fill(myDataSet, "????")
             
              ' Daten an das DataGridView binden
              ProjektMailsDataGridView.DataSource = myDataSet
              ProjektMailsDataGridView.DataMember = "???"
      wo die Fragezeichen sind weiss ich nicht was da hingehört. Bis dahin läuft es auch.
      Kann mir einer Helfen.

      Danke !

      Mark B

      Comment


      • #4
        Die ???? müsstest du durch den Tabellenamen ersetzen. Also hier wohl
        'ProjektMails'. Es gibt aber wenn du nur eine Tabelle hast keinen Grund ein Dataset zu nehmen es reicht eine Datatable. Dann musst du dich auch nicht mit dem Namen rumschlagen.

        Comment


        • #5
          Danke aber das funktioniert nicht. Wenn ich bei den ersten Fragezeichen den Tabellennamen 'ProjektMails' eingebe kommt die Fehlermneldung 'Ungültige Autorisierungsangabe'.
          Wenn ich bei den zweiten Fragezeichen den Tabellennamen 'ProjektMails' eingebe kommt die Fehlermneldung 'ProjektMails kann nicht erstellt werden'.

          Mark B

          Comment


          • #6
            'Ungültige Autorisierungsangabe'
            Dann ist vermutlich dein Connectionstring nocht nicht korrekt bzw. der User mit dem du an Windows angemeldet bist hat in der Datenbank nicht die notwendigen Rechte.

            Der andere Fehler ist dann für mich ein Folgefehler des ersten Fehlers. Was du an beiden Stellen als Name einträgst ist eigentlich auch egal. Es muss nur das gleiche sein da über diesen string die DataTable im DataSet identifiziert wird.

            Comment


            • #7
              Das Getue mit der OLE DB ist sowieso Mist.



              Code:
               ' Verbindung zur Datenbank herstellen
                      Dim myOleDbConnection As New OleDb.OleDbConnection
              
                      myOleDbConnection.ConnectionString = "Provider=SQLOLEDB;Server=OSSUS;Database=ProjektMails;Trusted_Connection=True"

              Ich greife mit einer vertraten Verbindung auf einen SQL Server zu. Gibt es da veielleicht was besseres als o.g. Code.

              Mark B

              Comment


              • #8
                Da ich nicht weiß welchen OLEDB Provider du benutzt und 'SQLOLEDB' nach was altem aussieht verweise ich dich mal hier hin. Such dir das passende aus.

                Comment


                • #9
                  es funktioniert

                  Hallo - ich habe jetzt einen funktionierenden Code:

                  Code:
                  'Connection zum Server herstellen
                          Dim sqlserverconnection As String = "Server=SERVER1;Database=MARKB;Trusted_Connection=True"
                          Dim sqlVerbindung = New SqlConnection(sqlserverconnection)
                  
                          'Abfrage erstellen
                          Dim abfrage As String = "Select * from tbl_adresse where firma_name like '%bechtle%'"
                  
                          'Data Adapter an die Abfrage hängen
                          Dim DataAdapter As New SqlDataAdapter(abfrage, sqlVerbindung)
                  
                          ' und mit dem DataAdapter das DataSet füllen
                          Dim myDataSet As New DataSet
                          DataAdapter.Fill(myDataSet, "tbl_adresse")
                  
                          ' Daten an das DataGridView binden
                          Tbl_adresseDataGridView.DataSource = myDataSet
                          Tbl_adresseDataGridView.DataMember = "tbl_adresse"
                  Jetzt habe ich aber ein weiteres Problem:
                  Solange das Grid vor der Abfrage an den SQL Server ungefiltert war konnte ich einzelne Spalten aus der gleichen Datenquelle auch außerhalb des Grids im Formular anzeigen lassen. Diese haben sich so wie ich im Grid gescrollt habe auch geändert.
                  Nach der Abfrage zeigt mir das Grid zwar das gewünschte an aber die Verbindung zu den außerhalb des Grids liegenden Elementen ist weg. Das ist blöd!!! Gibt es da veielleicht eine Lösung ?

                  Danke!

                  Mark B

                  Comment


                  • #10
                    Wenn alle Controls an der selben BindingSource hängen sollte das funktionieren. Du hast zwar im ersten Beitrag behauptet eine zu verwenden dein letzter Code sieht aber so aus als würdest du das Dataset direkt ans Grid binden und nicht über eine BindingSource.

                    Comment


                    • #11
                      Du hast recht. In meinem Code binde ich das Dataset direkt ans Grid. Wie kann ich es anders machen ??? Die BindingSource ändert sich ja mit jeder Abfrage die ich an den SQL Server schicke.

                      Mark B

                      Comment


                      • #12
                        Häh? Willst du mir jetzt sagen du erstellst jedesmal einen neu BindingSource Instanz oder das sich die Daten hinter der BindingSource ändern? Dann ist das genau der Sinn der BindingSource wenn sich die Daten ändern sollen alle es mitbekommen.

                        Comment


                        • #13
                          Ich habe von der Materie noch nicht so DIE Ahnung. Ich beschäftige mich erst seit ca. 8 Wochen mit VB.NET nach 20 Jahren ACCESS und Delphi.

                          Ich will meinen funktionienden Code:

                          Code:
                          'Connection zum Server herstellen
                                  Dim sqlserverconnection As String = "Server=SERVER1;Database=MARKB;Trusted_Connection=True"
                                  Dim sqlVerbindung = New SqlConnection(sqlserverconnection)
                          
                                  'Abfrage erstellen
                                  Dim abfrage As String = "Select * from tbl_adresse where firma_name like '%bechtle%'"
                          
                                  'Data Adapter an die Abfrage hängen
                                  Dim DataAdapter As New SqlDataAdapter(abfrage, sqlVerbindung)
                          
                                  ' und mit dem DataAdapter das DataSet füllen
                                  Dim myDataSet As New DataSet
                                  DataAdapter.Fill(myDataSet, "tbl_adresse")
                          
                                  ' Daten an das DataGridView binden
                                  Tbl_adresseDataGridView.DataSource = myDataSet
                                  Tbl_adresseDataGridView.DataMember = "tbl_adresse"
                          an eine eigene neue BindingSource hängen, die dann letztenendes mein DataGrid versorgt. Wie hänge ich den Code an eine neue BindingSource ?????

                          Danke !

                          Mark B

                          Comment


                          • #14
                            Das ist zwar nicht die Antwort auf Deine Frage, aber hier mal ein Beispiel wie man eine DataTable mit Daten aus einer DB befüllt.

                            Code:
                            Dim connection As New SqlClient.SqlConnection
                            Try
                                connection = New SqlClient.SqlConnection(m_settings.ConnectionString)
                                connection.Open()
                            
                                Dim command As New SqlClient.SqlCommand("SELECT * FROM [Document]", connection)
                                Dim da As New SqlClient.SqlDataAdapter(command)
                            
                                Dim dt As New DataTable
                                da.Fill(dt)
                            Catch ex As Exception
                                Throw ex
                            Finally
                                If Not connection Is Nothing AndAlso connection.State <> ConnectionState.Open Then
                                    connection.Close()
                                End If
                            End Try
                            Dim Me As MaxDev

                            Comment


                            • #15
                              Lösung

                              habe mir jetzt anders geholfen. Statt einer Abfrage an den SQL Server setze ich kombinationsfähige Filter vor das Formular. Dann funktioniert das auch mit den außen liegenden Feldern einwandfrei.

                              Code:
                              Me.ProjektMailsBindingSource.Filter = String.Format("Projekt Like '%" & suche_projekt.Text & "%' AND Subjekt Like '%" & suche_subject.Text & "%' AND von Like '%" & suche_von.Text & "%' AND an Like '%" & suche_an.Text & "%' AND body Like '%" & suche_body.Text & "%' AND online = 1")
                              Trotzdem vielen Dank für Eure Hilfe.

                              Mark B

                              Comment

                              Working...
                              X