[C# i MSSQL] wstawianie INSERT do bazy

0

tu jest wersja projektu (solution) zrarowana:

prosze o pomoc

0

Witaj! Nie wiem czy dobrze Cię zrozumiałem ale wydaje mi się, że chodzi Ci o to, że po odpaleniu Twojego projektu wyskakuje Ci błąd, że nie możesz dodać użytkownika do bazy i to przez wartość wpisaną w pole PersonID ?? Wydaje mi się, że pole w tej bazie jest polem Primary Key czyli wprowadzane tutaj wartości muszą być jednoznaczne (nie możesz mieć dwóch wartości 669 w polu ID). Jeżeli w tym tkwi Twój problem to możesz zmienić właściwości tego pola i ustawić je na autoinkrementowalne lub zrobić sobie w programie zmienną, która przechowuje aktualną ilość użytkowników. Mam nadzieję, że o to Ci chodziło, jeżeli nie to przepraszam za zamieszanie :P

0

tak masz racje, zdawalem sobie sprawe ze wartosc ID jest teraz na sztywno i masz racje ze tam jest PRIMARY KEY
wydaje mi sie ze autoinkrementacja jest wlaczona, wystarczy tylko wstawic COS zamiast tego sztywnego ID... tylko nie wiem co. Zauwaz ze liczba userow jest niekoniecznie najwiekszym ID bo mogli byc usuwani. Wiec potrzebuje napisac metode biorącą MAX(ID) z tabeli userow. Tylko teraz nie wiem jak taki SELECT wykonac tzn jak zapisac to w C#

0

Zgadza się. Ciężko mi jest w tym wypadku Ci coś zaproponować bo w swoich bazach MSSQL wykorzystuję klasę System.Data.SqlClient ale wydaje mi się, że to powinno działać:

        public int maxUserID()
        {
            object[] selectedData;

            try
            {
                con = new OleDbConnection(conString);

                OleDbDataAdapter tmp = new OleDbDataAdapter("SELECT MAX(PersonID) FROM PersonTable", con);
                dSet = new DataSet("PersonTable");
                tmp.Fill(dSet, "PersonTable");
                selectedData = dSet.Tables[0].Rows[0].ItemArray;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message);
                return -1;
            }

            return Convert.ToInt16(selectedData[0].ToString()) + 1;
        }
0

Ja chyba nie lapie w czym problem. Ustawiasz autoinkrementacje w mssql (czyli identity(poczatek, skok)) i juz. Piszac inserta wstawiasz tylko okreslone kolumny olewajac ID, ktore uzupelni baza. Nic tam nie wstawiasz.

0

Ja chyba nie lapie w czym problem. Ustawiasz autoinkrementacje w mssql (czyli identity(poczatek, skok)) i juz. Piszac inserta wstawiasz tylko okreslone kolumny olewajac ID, ktore uzupelni baza. Nic tam nie wstawiasz.

Dokładnie tak .. - a nawet nie musisz korzystać z tej swojej tablicy object[] -- co prawda nie odpalałem Twojego kodu źródłowego - jedynie z tego co tu napisałeś.

Możesz to robić tak:

DataSet.DataTable.Rows["Nazwa Kolumny"] = "Wartość do wstawienia";

gdzie DataSet, DataTable <-- zamień na swoje nazwy.

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