Title: SqlCommandBuilder

Hallo Liste,
Habe ein paar Schwierigkeiten mit dem SqlCommandBuilder. Mein DataGrid habe ich bisher folgendermassen geupdatet:

public void dg_Update(object sender, DataGridCommandEventArgs e)
                {
                        int ID = (int) dg.DataKeys[e.Item.ItemIndex];

                        TextBox tb_Obj_ID = (TextBox) e.Item.Cells[1].Controls[0];
                        TextBox tb_PICTYP = (TextBox) e.Item.Cells[2].Controls[0];

                        SqlConnection conn = new SqlConnection("server=SEE-MOB; uid=TestUser; pwd=myTestUser; database=SEE;");

                        conn.Open();

                        string SQL = "SELECT * FROM T_objpix";   

                        SqlDataAdapter adapter = new SqlDataAdapter(new SqlCommand(SQL, conn));
                        DataSet dataset = new DataSet();
                        adapter.Fill(dataset, "T_objpix");
                       
                        DataRow[] rows = dataset.Tables["T_objpix"].Select("ID=" + ID);

                        if(rows.Length == 1)
                        {
                                DataRow row = rows[0];                         
                                row["Obj_ID"] = tb_Obj_ID.Text;
                                row["PICTYP"] = tb_PICTYP.Text;                        
                        }
                       
                        SqlCommand cmd = new SqlCommand();
                        cmd.Connection = conn;
                        cmd.Parameters.Add("@Obj_ID", tb_Obj_ID.Text);
                        cmd.Parameters.Add("@PICTYP", tb_PICTYP.Text);                 
                        cmd.Parameters.Add("@ID", ID);
                        cmd.CommandText = "UPDATE T_objpix SET [EMAIL PROTECTED], [EMAIL PROTECTED] WHERE [EMAIL PROTECTED];";
                        cmd.ExecuteNonQuery();

                        adapter.UpdateCommand = cmd;
                        adapter.Update(dataset, "T_objpix");

                        conn.Close();

                        dg.EditItemIndex = -1;
                        ExecuteDataBinding();
                }

Das funktioniert soweit - nur etwas aufwendig. Jetzt wollte ich der Einfachheit- und �bersichthalber den fetten Teil mittels der Methode SqlCommandBuilder ersetzen. Der Quelltext sind dann folgendermassen aus:

public void dg_Update(object sender, DataGridCommandEventArgs e)
                {
                        int ID = (int) dg.DataKeys[e.Item.ItemIndex];

                        TextBox tb_Obj_ID = (TextBox) e.Item.Cells[1].Controls[0];
                        TextBox tb_PICTYP = (TextBox) e.Item.Cells[2].Controls[0];

                        SqlConnection conn = new SqlConnection("server=SEE-MOB; uid=TestUser; pwd=myTestUser; database=SEE;");

                        conn.Open();

                        string SQL = "SELECT * FROM T_objpix";   

                        SqlDataAdapter adapter = new SqlDataAdapter(new SqlCommand(SQL, conn));
                        SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
                        DataSet dataset = new DataSet();
                        adapter.Fill(dataset, "T_objpix");
                       
                        DataRow[] rows = dataset.Tables["T_objpix"].Select("ID=" + ID);

                        if(rows.Length == 1)
                        {
                                DataRow row = rows[0];                         
                                row["Obj_ID"] = tb_Obj_ID.Text;
                                row["PICTYP"] = tb_PICTYP.Text;                        
                        }                      
               
                        adapter.Update(dataset, "T_objpix");

                        conn.Close();

                        dg.EditItemIndex = -1;
                        ExecuteDataBinding();
                }

Das Ganze liefert mir dann aber dann folgende Exception:
System.InvalidOperationException: Dynamische SQL-Generierung wird f�r UpdateCommand gegen einen SelectCommand, der keine Spalteninformationen zur�ckgibt, nicht unterst�tzt.

F�r die folgende Zeile: adapter.Update(dataset, "T_objpix");


Villeicht k�nnt ihr mir ja weiterhelfen. Danke und Gruss
Tim







Antwort per Email an