Announcement

Collapse
No announcement yet.

Database Connection unter C#

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Database Connection unter C#

    Hallo,

    ich muss bestimmte Werte aus einer Access Datenbank rausholen, die ich später weiter verarbeite. Wie stellet unter C# eine Verbindung her, wo stelle ich die SQL-Abfrage?
    Bedanke mich im Vorraus.

    Grüsse
    Marius

  • #2
    Hallo,

    wird das Programm mit Notepad oder <i>Microsoft Visual Studio .NET</i> (VS .NET) geschrieben? Die für ACCESS zuständigen OLE DB Managed Provider sind im <i>System.Data.OleDb</i>-Namespace. Die weitere Vorgehensweise hängt davon ab, ob VS .NET zur Verfügung steht oder nicht

    Comment


    • #3
      Das Programm wird mit MS Visual Studio .Net geschriebe

      Comment


      • #4
        Hallo,

        &gt; ....mit MS Visual Studio .Net geschrieben

        wunderbar - das vereinfacht die Sache erheblich. Um den Inhalt einer ACCESS-Tabelle im DataGrid anzuzeigen, sind die folgenden Arbeitsschritte in Visual Studio .NET notwendig:

        - Neues C# Windows-Projekt<br>
        - Toolbox Data | <b>OleDbConnection</b> auf Formular ziehen -> Component Tray zeigt <i>oleDbConnection1</i> als Icon an<br>
        - <i>oleDbConnection1</i> auswählen <br>
        - Properties-Editor: Eigenschaft <b>ConnectionString</b> | Neuer Connection String | Verbindungsdaten im Dialog festlegen (so wie von ADO gewohnt) <br>
        - Toolbox Data | <b>OleDataAdapter</b> auf das Formular ziehen | Wizard startet:<br>
        a) bestehende Connection (oleDbConnection1) auswählen<br>
        b) <b>Use SQL Statements</b> auswählen<br>
        c) Query Builder: SELECT * FROM Kunden<br>
        - Rechter Mausklick auf <i>oleDbDataAdapter1</i>: <b>Generate Dataset</b>, das Icon für <i>dataSet11</i> taucht im Component Tray auf<br>
        - Toolbox: <b>DataGrid</b> auf Formular ziehen<br>
        - Properites-Editor: Eigenschaft <b>DataSource</b> vom DataGrid auf <i>dataSet11</i> legen<br>
        - <b>Load</b>-Ereignis des Formulars: Daten laden/anzeigen
        <pre>
        private void Form1_Load(object sender, System.EventArgs e)
        {
        oleDbDataAdapter1.Fill(dataSet11);
        }
        </pre&gt

        Comment


        • #5
          Danke für Deine Antwort,

          ich möchte aber die Daten nicht anzeigen. Ich kriege z.B. Daten übergeben, anhand denen möchte ich <b>einen</b> Datensatz aus der Datenbank rausholen, den ich später weiterverarbeite. Wie kriege ich das hin? bin schon am verzweifeln.

          Gruss
          Mariu

          Comment


          • #6
            Hallo,

            wenn nur die Daten eines Datensatzes gelesen werden sollen, wird es am effektivsten sein, direkt auf den <b>OleDbDataReader</b> zuzugreifen (d.h. der Namespace muss über <b>using System.Data.OleDb;</b> eingebunden werden). Das folgende Beispiel verzichtet auf jegliche visuelle Konfiguration und erledigt alle Aufrufe direkt im Sourcecode:
            <pre>
            private void button1_Click(object sender, System.EventArgs e)
            {
            string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Database\\Nordwind.mdb";
            string strAccessSelect = "SELECT [Personal-Nr], Nachname, Vorname FROM [Personal] WHERE [Personal-Nr] = 1";
            string sValue;
            OleDbConnection aAccessConn = new OleDbConnection(strAccessConn);
            OleDbCommand aAccessCommand = new OleDbCommand(strAccessSelect,aAccessConn);
            OleDbDataReader aReader ;
            aAccessConn.Open();
            try
            {
            aReader = aAccessCommand.ExecuteReader();
            aReader.Read();
            sValue = aReader["Nachname"].ToString();
            MessageBox.Show(sValue, "Nachname", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            finally
            {
            aAccessConn.Close();
            }
            }
            </pre&gt

            Comment


            • #7
              Klasse, vielen vielen Dank. Das ist genau das was ich brauche. Du hast mir sehr geholfen, danke.

              Mariu

              Comment


              • #8
                Hi ich suche den ConnectionString um eine Verbindung zur Interbase zu
                ermöglischen kann mir jemand dabei helfen danck

                Comment


                • #9
                  Hallo,

                  &gt;ich suche den ConnectionString um eine Verbindung zur Interbase zu ermöglichen..

                  da es für den InterBase keine SQL-Klasse gibt, gibt es unter .NET nur zwei Zugriffswege auf eine InterBase-Datenbank: <br>
                  1. <b>OleDbConnection</b>, in diesem Fall wird der ConnectionString wie gewohnt über den Konfigurationsdialog <i>Datenverknüpfungseigen</i> festgelegt. <br>
                  2. <b>Connection</b>-Objekt von ADO, wobei .NET über den Runtime Callable Wrapper (RCW) <b>adodb.dll</b> auf die alten COM-Objekte von ADO zugreift und das so erhaltene Recordset-Objekt via OleDbDataAdapter in ein .NET DataTable/DataSet entlädt.

                  Das folgende Beispiel demonstriert den "alten" ADO-Weg des Zugriffs auf eine InterBase-Datenbank, der auch unter .NET zur Verfügung steht, wenn dem Projekt eine Referenz zur <i>Microsoft ActiveX Data Objects 2.6 Library</i> hinzugefügt wird (Namespace ADODB):
                  <pre>
                  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
                  Dim aCon As New ADODB.Connection()
                  Dim aRS As ADODB.Recordset
                  Dim aOleDA As New Data.OleDb.OleDbDataAdapter()
                  Dim aDS As New Data.DataSet()
                  Dim sConStr As String
                  sConStr = "Provider=SIBProvider;Location=localhost:;Data Source=C:\Database\REDSYS2.GDB;Character Set=ISO8859_1;User Id=SYSDBA; Password=masterkey"
                  aCon.Open(sConStr)
                  aRS = aCon.Execute("SELECT * FROM Test")
                  aOleDA.Fill(aDS, aRS, "Test")
                  DataGrid1.DataSource = aDS.Tables(0).DefaultView()
                  End Sub
                  </pre&gt

                  Comment


                  • #10
                    allenfalls wäre auch nocht ODBC.NET zu erwähnen, wurde allerdings erst vor kurzem freigegeben, habe entsprechend noch nie damit gearbeitet ..

                    Comment


                    • #11
                      Der Source Code ist ja ok aber wie ist er in C

                      Comment


                      • #12
                        Habe die Lösung gefunden.

                        private void Form1_Load(object sender, System.EventArgs e)
                        {
                        string strDSN = "Provider=SIBProvider;Location=localhost:;Data Source=d:\\Laufwerck_D\\Diplomarbeit\\Bericht_Dok\ \Ausarbeitung\\interbase\\olivier.gdb;Character Set=ISO8859_1;User Id=SYSDBA; Password=masterkey";
                        string strSQL = "SELECT * FROM ABTEILUNG" ;
                        OleDbConnection myConn = new OleDbConnection(strDSN);
                        OleDbDataAdapter myCmd = new OleDbDataAdapter( strSQL, myConn );
                        myConn.Open();
                        DataSet dtSet = new DataSet();
                        myCmd.Fill( dtSet, "ABTEILUNG" );
                        dataGrid1.DataSource = dtSet.Tables[0];

                        Comment


                        • #13
                          INSERT klappt nicht

                          Hallo zusammen,
                          habe folgende Problem:
                          Möchte Daten in eine bestehende Access 2010-Datenbank schreiben, aber irgendwie scheint es nicht zu klappen, bzw. sehe ich in der Tabelle keinen neuen Eintrag.
                          Die Tabelle besteht lediglich aus den Feldern ID, firma und strasse.
                          Das auslesen klappt dagegen ohne Probleme und eine Fehlermeldung erhalte ich auch nicht.
                          Ich arbeite mit Visual c# 2008 express und bin noch Neuling auf dem Gebiet

                          Hier der Code:
                          [highlight=c#]
                          private void btn_save_ds_Click(object sender, EventArgs e)
                          {
                          InsertRow("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=FirmenDB_V2.1.accdb;", "INSERT INTO tbl_test (firma,strasse) VALUES ('" + tb_company.Text + "','" + tb_street.Text + "') ");
                          }

                          public void InsertRow(string connectionString, string insertSQL)
                          {
                          using (OleDbConnection connection = new OleDbConnection(connectionString))
                          {
                          OleDbCommand command = new OleDbCommand(insertSQL);
                          command.Connection = connection;
                          try
                          {
                          connection.Open();
                          command.ExecuteNonQuery();
                          }
                          catch (Exception ex)
                          {
                          Console.WriteLine(ex.Message);
                          }
                          }
                          }
                          [/highlight]
                          Zuletzt editiert von gfoidl; 24.08.2012, 23:30.

                          Comment


                          • #14
                            Hallo,

                            lies dir ADO.NET – verbindungsorientierte Objekte durch, dann bist kein ganzer Neuling mehr und du wirst es von selbst schaffen.

                            BTW: Es wäre nicht nötig gewesen einen 10 Jahre alten Thread zu reanimieren und den Code hättest du auch formatieren können. Siehe Hinweise und Formatierung von C#-Code

                            mfG Gü
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment

                            Working...
                            X