Laden...

DataRelation auf DataSet welches mit where-klausel gefüllt wurde

Erstellt von serial vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.171 Views
S
serial Themenstarter:in
902 Beiträge seit 2007
vor 15 Jahren
DataRelation auf DataSet welches mit where-klausel gefüllt wurde

verwendetes Datenbanksystem: SQl EE 2005

Hallo, ich habe folgendes Problem:

Ich hole mir Daten aus 4 Tabellen aus der Datenbank, und verbinde die im DataSet mit Relations.

Nun brauch ich aus der ersten tabelle nicht alle daten, sondern nur bestimmt, ergo setze ich eine select mit einer where klausel auf die eine tabelle ab.

Allerdings kann ich nun keine Relations mehr setzen, ich zeig mal den enstprechenden code


public class QuizRepository
    {
        private static void BuildQuizRelations(DataSet quizSet)
        {
//bei dieser relation kracht es schon, fehlermeldung siehe unten
            quizSet.Relations.Add("quizQuestions", quizSet.Tables["Quiz"].Columns["quiz_id"], quizSet.Tables["QuizFragen"].Columns["frage_quiz_id"],true);
            quizSet.Relations.Add("QuestionsAnswers", quizSet.Tables["QuizFragen"].Columns["frage_id"], quizSet.Tables["QuizAntworten"].Columns[1],true);
            quizSet.Relations.Add("QuestionImages", quizSet.Tables["QuizFragen"].Columns["frage_id"], quizSet.Tables["QuizImages"].Columns["image_frage_id"],true);
        }

        private static DataSet GetQuizDataSet(int senderID)
        {
            DataSet result = new DataSet();
            using(SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["quizString"].ConnectionString))
            {
//hier die batchabfrage, um alle 4 tabellen zu holen
                SqlCommand command = new SqlCommand("select * from Quiz where quiz_sender_id = @senderID;select * from QuizAntworten;select * from QuizFragen; select * from QuizImages", connection);
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                command.Parameters.AddWithValue("@senderID", senderID);
                adapter.TableMappings.Add("Table", "Quiz");
                adapter.TableMappings.Add("Table1", "QuizAntworten");
                adapter.TableMappings.Add("Table2", "QuizFragen");
                adapter.TableMappings.Add("Table3", "QuizImages");
                adapter.Fill(result);
                BuildQuizRelations(result);
            }
            
            return result;
        }
}

Beim setzen der relations kommt folgender fehler:

Diese Einschränkung kann nicht aktiviert werden, da nicht alle Werte entsprechende übergeordnete Werte besitzen.

in meinen tabellen gibt es aber für alles werte...was mache ich hier falsch?

mfg
serial

S
serial Themenstarter:in
902 Beiträge seit 2007
vor 15 Jahren

oder liegt es wirklich daran, das ich gefilterte "hauptdaten" hole, und alle unterdaten.
Da kann es dann natürlich passieren das es für unterdaten keine entsprechende parentrow gibt! Wenn dies das problem ist, wie kann ich es am cleversten lösen?

mfg
serial

S
serial Themenstarter:in
902 Beiträge seit 2007
vor 15 Jahren

hat keine eine gute idee?

mfg
serial

Y
102 Beiträge seit 2005
vor 15 Jahren

Was ist wenn du das Dataset mit sämtlichen Werten füllst und anschließend auf das Dataset ein select ausführst.


string where ="..."; //Die where-Klausel ohne where
DataTable tbl = result.Table[];
DataRow [] row = tbl.Select(where);

S
serial Themenstarter:in
902 Beiträge seit 2007
vor 15 Jahren

hm...muss ich mal ausprobieren!
Danke erstmal