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
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
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);