Jak go wykonuję z pod menedzera SQL'a jest ok, ale jak wykonuję z kodu
(prubowałem ciąg SQL'a), a nawet jako procedurę z SQL'a to mam błąd treści:
--------------
dtSELECT
System.Data.ConstraintException: Nie można włączyć ograniczeń. Jeden lub
więcej wierszy zawiera wartości naruszające ograniczenia dotyczące wartości
niezerowych, unikatowości lub klucza obcego.
w System.Data.DataTable.EnableConstraints()
w System.Data.DataTable.set_EnforceConstraints(Boolean value)
w System.Data.DataTable.EndLoadData()
w System.Data.Common.DataAdapter.FillFromReader(DataSet dataset,
DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32
startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object
parentChapterValue)
w System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader
dataReader, Int32 startRecord, Int32 maxRecords)
w System.Data.Common.LoadAdapter.FillFromReader(DataTable[] dataTables,
IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
w System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption,
FillErrorEventHandler errorHandler)
w System.Data.DataTable.Load(IDataReader reader)
w SQL.SQL.dtSELECT(Int32 ID_UZYTKOWNIKA)
------------------------------
Początkowo SELECT był z warunkiem, ale go wyciołem, zdjołem z w tabelach z
kolumn warunek NULL (mogą być puste), poza indeksem, ale nie pomogło nadał
zwraca komunikat błędu:(
Nie wiem gdzie szukać przyczyn tego komunikatu dokładnie:
Nie można włączyć ograniczeń. Jeden lub więcej wierszy zawiera wartości
naruszające ograniczenia dotyczące wartości niezerowych, unikatowości lub
klucza obcego.
Może przynajmniej ktoś mnie nakieruje, czy to jest powód w kodzie, czy w
może w danych?
Ale jeśli nie mogę złożyć prostego INNER JOIN, to jakoś tego nie kumam :(
P.S. Może ważne - W DataTable są co prawda zwracane dane, ale z innych tabel
niż występują w select. Kwerenda zwraca dane z tabeli UZYTKOWNICY, a nie
FIRMY. Baza nie ma nałożonych powiązań miedzy tabelami.
Pozdrawiam i z góry dzięki za pomoc.
/Jędrek
Spróbuj wykonać Preview dla tego DataAdaptera. Na jakim polu masz założony
indeks? Czy w bazie danych jest on także unikatowy? No i jeszcze raz sprawdź
czy rzeczywiście na wszystkich kolumnach masz AllowDbNull.
Pozdrawiam
Grzegorz
jesli nie myle bledow to:
mozesz to rozwiazac na 2 sposoby
1. nie elegancki,
wylacz constrainty w dataSetcie:
Jak masz dataSeta
ds.EnforceConstraints = false;
2. elegancki, rozbija sie mu o to, ze constraity nie sa zgodne w
datasetcie oraz w bazie danych.
odswiez dataSeta [przeciagnij jeszcze raz tabele w designerze]
pozdr.
L.
W tabeli UPRAWNIENIA mam dwa indeksy obce ID_FIRMY i ID_UZYTKOWNIKA oraz
własny tabeli ID_UPRAWNIENIA.
Sprawdzałem i NULL'a nie mogę wstawić tylko w kluczu tabeli, pozostałe pola
mogą być NULL.
Klucze są unikatowe w karzdej z tabel natomiast w tabeli uprawnienia oba
klucze obce mogą występować wielokrotnie (to chyba nie jest błąd w
założeniach)
Nierozumiem tylko dlaczego ten sam SELECT z SQL Serwer Managment studio
express wykonuje się poprawnie, a z kodu nie?
Wywołanie procedury wykonuję tak:
--------
SqlConnection SQLCN = new SqlConnection();
SQLCN.ConnectionString = SConnect
SQLCN.Open();
SqlCmd.CommandType = CommandType.StoredProcedure;
SqlCmd.CommandText = "TEST";
SqlCmd.Parameters.Add("@ID_UZYTKOWNIKA",
SqlDbType.Int).Value=ID_UZYTKOWNIKA;
SqlDataReader SqlDr;
SqlDr = SqlCmd.ExecuteReader();
DT.Load(SqlDr);
SQLCN.Close();
--------
Może tu jest błąd, ale na prostych SELECT to działa.
A może wiersze, które uważam za niepowiazane z zapytaniem mogą generować
błąd jeśli zawierają niepoprawną informację?
Chyba jeszcze mi pozostaje testowanie na pustej bazie z FULL danymi...
Pozdrawiam
/Jędrek
AFAIR takie błędy też są wtedy jak długość pola w DataTable jest
niewystarczająca. Proponuję byś poszedł za radą laziers, a dla ułatwienia
zrób w bazie widok taki jak Twój selekt i potem przeciągnij go na Twój
DataSet. Alternatywnie można spróbować wyszukać binarnie jakiś felarny
rekord i naocznie przekonać się co w nim jest nie tak :).
Pozdrawiam
Grzegorz
--
pozdrawiam,
Paweł Filipiak
Użytkownik "Jędrek" <andr...@o2.pl> napisał w wiadomości
news:fr349g$7p8$1...@nemesis.news.neostrada.pl...