Føre 2 selects ind i en datatable
Jeg har følgende kode, hvor jeg ved at begge select (har testet dem begge i access), giver henholdsvis 5 og 2 rækker retur.Det jeg forsøger på er at oprette en tabel hvor jeg først putter den første select ind i. Jeg vil så efterfølgende bruge den samme tabel til at putte select nr. 2 ind i. Den fejler ved
while (myReader2.Read())
{
r = AItems.NewRow();
try
{
r["OpskriftId"] = (myReader["OpskriftId"]);
og siger "No data exists for the row/column" - jeg ved dog, at når jeg prøver selecten i access kommer den retur med 2 rækker.
Nogen der kan sige hvorfor?
min kode:
public Status GetSeekAdvancedSortMine(int BrugerId, string seekname, string seekingredienser, string seekfremgangsmaade, string KategoriId, string MaaltidId, string TemaId, string LandId, ref DataTable SeekAdvanced)
{
Status status = Status.Failure;
DataRow r = null;
DataTable AItems = new DataTable();
//Konverterer KaktegoriID (indkommen string) til int
//Hvis KategoriID.Index (=Vælg kategori teksten) = 0 skal den ikke sætte
//teksten ind i Select statementen men istedet ignorere den ellers skal
//den med
int faktura = Convert.ToInt32(KategoriId);
string fakturastring = "";
if (faktura != 0)
{
fakturastring = "AND Opskrift.KategoriId = " + faktura;
}
//Konverterer MaaltidId (indkommen string) til int
//Hvis MaaltidId.Index (=Vælg måltid teksten) = 0 skal den ikke sætte
//teksten ind i Select statementen men istedet ignorere den ellers skal
//den med
int maaltid = Convert.ToInt32(MaaltidId);
string maaltidstring = "";
if (maaltid != 0)
{
maaltidstring = "AND Opskrift.MaaltidId = " + maaltid;
}
//Konverterer TemaId (indkommen string) til int
//Hvis TemaId.Index (=Vælg tema teksten) = 0 skal den ikke sætte
//teksten ind i Select statementen men istedet ignorere den ellers skal
//den med
int temaid = Convert.ToInt32(TemaId);
string temastring = "";
if (temaid != 0)
{
temastring = "AND Opskrift.TemaId = " + temaid;
}
//Konverterer LandId (indkommen string) til int
//Hvis LandId.Index (=Vælg land teksten) = 0 skal den ikke sætte
//teksten ind i Select statementen men istedet ignorere den ellers skal
//den med
int land = Convert.ToInt32(LandId);
string landstring = "";
if (land != 0)
{
landstring = "AND Opskrift.LandId = " + land;
}
try
{
AItems.Columns.Add(new DataColumn("OpskriftId", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("OpskriftNavn", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Ingredienser", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Fremgangsmaade", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Servering", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Points", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Dato", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("Print", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("KategoriId", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("MaaltidId", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("TemaId", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("LandId", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("BrugerNavn", Type.GetType("System.String")));
AItems.Columns.Add(new DataColumn("KategoriNavn", Type.GetType("System.String")));
command.CommandText = "SELECT Opskrift.OpskriftId, Opskrift.OpskriftNavn, Opskrift.Ingredienser, Opskrift.Fremgangsmaade, Opskrift.Servering, Opskrift.Points, Opskrift.Dato, Opskrift.Print, Opskrift.KategoriId, Opskrift.MaaltidId, Opskrift.TemaId, Opskrift.LandId, Bruger.BrugerNavn, Kategori.KategoriNavn FROM (Kategori INNER JOIN Opskrift ON Kategori.KategoriId=Opskrift.KategoriId) INNER JOIN Bruger ON Opskrift.BrugerId=Bruger.BrugerId WHERE Opskrift.BrugerId = @BrugerId AND ((Opskrift.OpskriftNavn Like '%" + @seekname + "%') AND (" + @seekingredienser + ") AND (" + @seekfremgangsmaade + ") " + fakturastring + maaltidstring + landstring + temastring + ')';
command.Parameters.Clear();
command.Parameters.Add(new OleDbParameter("@BrugerId", BrugerId));
command.Parameters.Add(new OleDbParameter("@seekname", seekname));
command.Parameters.Add(new OleDbParameter("@seekingredienser", seekingredienser));
command.Parameters.Add(new OleDbParameter("@KategoriId", KategoriId));
command.Parameters.Add(new OleDbParameter("@MaaltidId", MaaltidId));
command.Parameters.Add(new OleDbParameter("@LandId", LandId));
command.Parameters.Add(new OleDbParameter("@TemaId", TemaId));
OleDbDataReader myReader = command.ExecuteReader();
//går gennem tabellen og lægger ind i rækker
while (myReader.Read())
{
r = AItems.NewRow();
try
{
r["OpskriftId"] = (myReader["OpskriftId"]);
r["OpskriftNavn"] = (myReader["OpskriftNavn"]);
r["Ingredienser"] = (myReader["Ingredienser"]);
r["Fremgangsmaade"] = (myReader["Fremgangsmaade"]);
r["Servering"] = (myReader["Servering"]);
r["Points"] = (myReader["Points"]);
r["Dato"] = (myReader["Dato"]);
r["Print"] = (myReader["Print"]);
r["KategoriId"] = (myReader["KategoriId"]);
r["MaaltidId"] = (myReader["MaaltidId"]);
r["LandId"] = (myReader["LandId"]);
r["TemaId"] = (myReader["TemaId"]);
r["BrugerNavn"] = (myReader["BrugerNavn"]);
r["KategoriNavn"] = (myReader["KategoriNavn"]);
}
catch
{ }
//Tilføjer rækken til datatable
AItems.Rows.Add(r);
}
myReader.Close();
//**********************************
try
{
command.CommandText = "SELECT Opskrift.OpskriftId, Opskrift.OpskriftNavn, Opskrift.KategoriId, Opskrift.LandId, Opskrift.TemaId, Opskrift.MaaltidId, Opskrift.Tilberedningstid, Opskrift.BrugerId AS Opskrift_BrugerId, Opskrift.Kilde, Opskrift.PortionStk, Opskrift.Protein, Opskrift.Fedt, Opskrift.Kulhydrat, Opskrift.Pris, Opskrift.BilledeNavn, Opskrift.Ingredienser, Opskrift.Fremgangsmaade, Opskrift.Servering, Opskrift.Fedtfattig, Opskrift.AntalVisninger, Opskrift.Offentlig, Opskrift.Dato, Opskrift.Print, Opskrift.Points, Opskrift.AntalPersonerAfgivetPoints FROM Opskrift INNER JOIN GemteOpskrifter ON Opskrift.OpskriftId=GemteOpskrifter.OpskriftId WHERE GemteOpskrifter.BrugerId = @BrugerId2";
//AND ((Opskrift.OpskriftNavn Like '%" + @seekname + "%') AND (" + @seekingredienser + ") AND (" + @seekfremgangsmaade + ") " + fakturastring + maaltidstring + landstring + temastring + ')';
command.Parameters.Clear();
command.Parameters.Add(new OleDbParameter("@BrugerId2", BrugerId));
//command.Parameters.Add(new OleDbParameter("@seekname2", seekname));
//command.Parameters.Add(new OleDbParameter("@seekingredienser2", seekingredienser));
//command.Parameters.Add(new OleDbParameter("@KategoriId2", KategoriId));
//command.Parameters.Add(new OleDbParameter("@MaaltidId2", MaaltidId));
//command.Parameters.Add(new OleDbParameter("@LandId2", LandId));
//command.Parameters.Add(new OleDbParameter("@TemaId2", TemaId));
OleDbDataReader myReader2 = command.ExecuteReader();
//går gennem tabellen og lægger ind i rækker
while (myReader2.Read())
{
r = AItems.NewRow();
try
{
r["OpskriftId"] = (myReader["OpskriftId"]);
r["OpskriftNavn"] = (myReader["OpskriftNavn"]);
r["Ingredienser"] = (myReader["Ingredienser"]);
r["Fremgangsmaade"] = (myReader["Fremgangsmaade"]);
r["Servering"] = (myReader["Servering"]);
r["Points"] = (myReader["Points"]);
r["Dato"] = (myReader["Dato"]);
r["Print"] = (myReader["Print"]);
r["KategoriId"] = (myReader["KategoriId"]);
r["MaaltidId"] = (myReader["MaaltidId"]);
r["LandId"] = (myReader["LandId"]);
r["TemaId"] = (myReader["TemaId"]);
r["BrugerNavn"] = (myReader["BrugerNavn"]);
r["KategoriNavn"] = (myReader["KategoriNavn"]);
}
catch
{ }
//Tilføjer rækken til datatable
AItems.Rows.Add(r);
myReader2.Close();
}
}
catch
{ }
//***********************************
//myReader.Close();
SeekAdvanced = AItems;
status = Status.Success;
}
catch
{ }
return status;
}
mvh
simsen :-)