Announcement

Collapse
No announcement yet.

DataGrid befüllen...

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

  • DataGrid befüllen...

    Hallo

    Ich habe vollgendes Problem:

    Ich befülle mein Datagrid per drag and drop von hinzugefügter Datenquelle!

    Über einen Button möchte ich den jeweils markierten Datensatz im DataGrid

    löschen!

    In meinem Button ist vollgender Code hinterlegt:

    private void button1_Click(object sender, EventArgs e)
    {
    SqlConnection con = null; //Variable con definieren, null einlesen


    //*1* Baue ConnectionString auf
    SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
    csb.DataSource = @".\SQLEXPRESS";
    csb.InitialCatalog = "Materialwirtschaft";
    csb.IntegratedSecurity = true;

    //*2* Erzeuge Verbindung
    con = new SqlConnection(csb.ConnectionString);
    if (con.State != ConnectionState.Open) con.Open(); // Datenbank öffnen mit if-Abfrage
    MessageBox.Show("SQL-Verbindung ist: " + con.State.ToString());


    // try
    {

    // Material_id ermitteln
    string Material_id =
    material_xlsDataGridView.CurrentRow.Cells["dataGridViewTextBoxColumn1"].Value.ToString();

    //Command erzeugen und Verbindung öffnen!

    SqlCommand cmd = new SqlCommand("", con);
    cmd.Parameters.AddWithValue("@Material_id", Material_id);
    if (con.State != ConnectionState.Open) con.Open();





    cmd.ExecuteNonQuery();
    }
    //catch
    {
    MessageBox.Show("Ein Fehler ist aufgetreten! Befehl konnte nicht ausgeführt werden ");
    }
    //finally
    {
    if (con.State == ConnectionState.Open) con.Close(); //Datenbank schließen+++++++++++++++++++++++++++++++++++++++
    }



    }

    Das Programm Compaliert Fehler frei, aber wenn ich den Button tritt vollgender

    Fehler für con.open auf:

    Die physikalische Datei "F:\Schule\Projektarbeit\Datenbank\Materialwirtsch aft.mdf" kann nicht geöffnet werden. Betriebssystemfehler 32: "32(Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.)".
    Die physikalische Datei "F:\Schule\Projektarbeit\Datenbank\Materialwirtsch aft_log.LDF" kann nicht geöffnet werden. Betriebssystemfehler 32: "32(Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.)".
    Die von der Anmeldung angeforderte "Materialwirtschaft"-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
    Fehler bei der Anmeldung für den Benutzer 'ANDRE\Andre'.
    Dateiaktivierungsfehler. Der physikalische Dateiname "F:\Schule\Projektarbeit\Datenbank\Materialwirtsch aft_log.LDF" ist möglicherweise falsch.

    Ach so.... ich verwende ein Sql Microsoft Enterprisedatenbank + vs 2005!

    Wäre Super wenn mir jemand helfen könnte!

    Frohe Ostern!

  • #2
    Hallo,

    ich sehe (unabhängig von den Fehlermeldungen) einen gravierenden Fehler: der Sql-Befehl fehlt - bei dir ist es ein leerer String statt:
    Code:
    SqlCommand cmd = new SqlCommand(
        "Delete from Materialwirtschaft WHERE ID = @Material_id", con);
    Die Fehlermeldungen deuten eher auf Zugriffsprobleme hin: Sind alle Parameter für die DbConnection richtig eingetragen? Du schreibst von "Enterprisedatenbank", das steht doch im Widerspruch zu ".\SQLEXPRESS". Vielleicht ist die DB für mehrere Benutzer gesperrt, und Visual Studio selbst blockiert?

    Bitte kontrolliere die Connection-Parameter mit den SQL-Server-Varianten unter ConnectionStrings.

    Dein Code ist auch etwas zu unübersichtlich (und Du kannst ihn auch formatieren: markieren und mit dem Button '#' versehen). Ich schlage vor, ihn in eine eigene Methode auszulagern; dann kann er besser wiederverwendet werden, und der using-Block vereinfacht den Umgang mit der DbConnection:
    Code:
    private int ExecuteCommand(string commandText, int id) {
        int result = -1;
        //  erzeuge den ConnectionString, das kann so übernommen werden
    
        //  die DbConnection kapseln
        using(SqlConnection con = new SqlConnection(csb.ConnectionString)) {
            SqlCommand cmd = new SqlCommand(commandText, con);
            cmd.Parameters.AddWithValue("@Material_id", id);
    
            try {
                con.Open();
                result = con.ExecuteNonQuery();
            } catch(Exception ex) {
                //  diese Variante liefert die meisten Informationen
                MessageBox.Show(ex.ToString());
            }
            //  finally und con.Close können wegen des using-Blocks entfallen
        }
        return result;
    }
    Der Button-Click beschränkt sich dann darauf:
    Code:
    private void button1_Click(object sender, EventArgs e)
    {
        //  nach meinem Verständnis ist eine ID immer eine Zahl, allenfalls eine Guid,
        //  aber niemals ein String
        int Material_id = (int)material_xlsDataGridView.CurrentRow.
            Cells["dataGridViewTextBoxColumn1"].Value;
        if (ExecuteCommand("Delete from Materialwirtschaft WHERE ID = @Material_id", Material_id) >= 0)
            MessageBox.Show(Material_id.ToString() + " wurde gelöscht");
        else
            MessageBox.Show(Material_id.ToString() + " wurde nicht gelöscht");
    }
    Übrigens: Wenn Du mit DataGridView arbeitest, dann benutze auch im Titel diese Bezeichnung. Es gibt schließlich auch DataGrid (sogar doppelt: für WinForms und für WebForms) und außerdem GridView und DataView. Genaue Angaben sollen genauer helfen!

    Viel Erfolg! Jürgen

    PS. Etwas mehr Sorgfalt bei der Verwendung der deutschen Sprache würde mich noch mehr animieren. Die konsequente Verwendung des Wortes "vollgend" lässt mich eher an "voll besoffen" denken.
    Zuletzt editiert von Jürgen Thomas; 24.03.2008, 11:47.

    Comment


    • #3
      Hallo,

      Die physikalische Datei "F:\Schule\Projektarbeit\Datenbank\Materialwir tsch aft.mdf" kann nicht geöffnet werden. Betriebssystemfehler 32: "32(Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.)".
      Diese originale Fehlermeldung lässt den Schluss zu, dass die Datenbank im SQL Server 2005 Express im User Instance-Modus bereits geöffnet ist und daher die 2. Datenbankverbindung kollidiert (nur die Express-Edition vom SQL Server 2005 unterstützt den User Instance-Modus). Wenn in der Verbindungszeichenfolge auch AttachDbFilename aufgeführt wird, versucht der SQL Server 2005 Express, erst zur Laufzeit beim Öffnen der Verbindung die Datenbankdateien in die separat als Prozess gestartete SQL Server-Instanz einzuhängen. Dieses Einhängen schlägt jedoch immer dann fehl, wenn die Datenbankdateien bereits von einer anderen SQL Server-Instanz geöffnet wurden.

      Comment

      Working...
      X