Aktuazlizacja bazy danych + DataSet

0

Witam

Wiem że już ten temat był ale w innych postach nie znalazłem rozwiązania. Mam taki kawałek kodu:

 dane.Tables[0].Rows[indeks].BeginEdit();
            dane.Tables[0].Rows[indeks]["Stan"] = "W trakcie realizacji";
            dane.Tables[0].Rows[indeks].EndEdit();
            SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
            adapter.Update(dane.Tables[0]);

i niestety wywala mi błąd takiej treści: Dynamiczne generowanie kodu SQL dla elementu UpdateCommand nie jest obsługiwane dla elementu SelectCommand, który nie zwraca żadnych informacji o kolumnie klucza.

tabela do której robie UPDATE nie posiada klucza głównego tylko obcy. W przypadku innej bazy danych powyższy kod działał bez zarzutu. Wie ktoś może jak to zmienić?

Pozdrawiam

0

string sqlpracownicy = "USE firma SELECT * FROM pracownicy";

 
SqlConnection con = new SqlConnection(strCon);

            con.Open();
            DataTable dt = new DataTable();

dadapter = new SqlDataAdapter();
            dadapter.SelectCommand = new SqlCommand(sqlpracownicy);
            dadapter.SelectCommand.Connection = con;
            dadapter.Fill(dt);
            dadapter.Update(dt);
 string sql_add =  "ALTER TABLE pracownicy ADD " + textBox1.Text + " VARCHAR(10)";
            SqlConnection con = new SqlConnection(strCon);
            con.Open();
            DataTable dt = new DataTable();
            SqlDataAdapter sda = new SqlDataAdapter(sql_add, con);
            SqlCommandBuilder cd = new SqlCommandBuilder(sda);
            try
            {
                sda.Fill(dt);
                sda.Update(dt);}
0

Pierwszy sposób coś nie działa a w drugim jest dodanie nowej kolumny a ja nie chce zmieniać bazy

0

SqlCommandBuilder nie potrafi wygenerować zapytania UpdateCommand, jeżeli nie masz klucza głównego w tabeli. Dzieje się tak dla tego, że w tym wypadku nie wiadomo jaki wiersz w bazie danych zaktualizować!

Zresztą to jest bardzo bardzo zła sytuacja, jeżeli nie masz klucza głównego tabeli. Każda tabela powinna jeżeli nie musi mieć klucz główny.

Jeżeli jednak nie chcesz dodawać klucza głównego (nie polecam) to możesz samemu napisać zapytanie aktualizujące czyli zmodyfikować UpdateCommand w klasie adapter.

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