» »

[asp.net] Dvojni sql stavek

[asp.net] Dvojni sql stavek

SloDave ::

Kako lahko izvedem dvojno sql poizvedbo (nekaj takega):


Koda:

OleDbConnection objConn = new OleDbConnection(ConfigurationSettings.AppSettings["DSN"]);
OleDbCommand objCmd;
OleDbDataReader objRdr;
OleDbCommand objCmd1;
OleDbDataReader objRdr1;

OleDbDataAdapter objDA;
DataSet objDS = new DataSet();
DataRow objDR;
DataTable testtable;
void Page_Load(){

DataSet objDS = new DataSet();
DataTable objDT = new DataTable("Plan");
DataColumn objDC;
DataRow objDR;

objDC = new DataColumn(("Šifra"), Type.GetType("System.Int32"));
objDT.Columns.Add(objDC);
objDC = new DataColumn(("Opis"), Type.GetType("System.String"));
objDT.Columns.Add(objDC);
objDC = new DataColumn(("Kolicina"), Type.GetType("System.Int32"));
objDC.DefaultValue = 0;
objDT.Columns.Add(objDC);
objDC = new DataColumn("Cena", Type.GetType("System.Int32"));
objDT.Columns.Add(objDC);
objDC = new DataColumn("Znesek", Type.GetType("System.Int32"));
objDC.DefaultValue = 0;
objDT.Columns.Add(objDC);
objDC = new DataColumn("Grupa", Type.GetType("System.Int32"));
objDT.Columns.Add(objDC);

objConn.Open();
//glej tukaj
objCmd = new OleDbCommand("SELECT * FROM os WHERE group = 2", objConn);
objRdr = objCmd.ExecuteReader();
while (objRdr.Read()){

objCmd1 = new OleDbCommand("SELECT * FROM plan WHERE SM = 1234 and osID = '"+objRdr["osID"]"'", objConn);
objRdr1 = objCmd1.ExecuteReader();

objDR = objDT.NewRow();
objDR["Šifra"] = objRdr["osID"];
objDR["Opis"] = objRdr["NazivOS"];
objDR["Kolicina"] = objRdr1["kolicina"];
objDR["Cena"] = objRdr["cena"];
objDR["Znesek"] = objRdr1["znesek"];
objDT.Rows.Add(objDR);
}

objRdr1.Close();
objRdr.Close();
objConn.Close();

objDS.Tables.Add(objDT);
dg.DataSource = objDS;
dg.DataMember = "Plan";
dg.DataBind();
}





Problem pri tej kodi je ker nista dovoljena dva ExecuteReader-ja, ima kdo kakšno idejo kako drugače rešiti težavo?
Če obstaja kakšna alternativa kako rešiti problem, bi bil zlo vesel?

MaCoFaCo ::

INNER JOIN obeh tabel?

Nekaj v stilu (pišem na pamet):
SELECT * FROM plan INNER JOIN os ON plan.osID = os.osID WHERE os.group = 2 AND plan.SM = 1234

SloDave ::

Inner Join enostavno ne gre, ker želim dobiti iz tabele os vse rezultate, iz tabele plan pa samo tiste ki imajo vnos z določenim osidjem ter SMjem. (pa tut LEFT JOIN ne prikaže prov).

Stvar sm rešil tako da sm najprej s prvim sqljem pobral rezultate jih spravu v array ter jih potem uporabu pri drugem sqlju.

destiny ::

Zakaj pa ne uporabiš datatabel v navezi s dataadapterjem?.
Datareader je učinkovit, če iščeš 1. vrstico iz tabele v bazi. Za več vrstic je precej boljša Dataadapterjeva fill metoda...

destiny ::

Aja, drugač pa lohk vse dobiš naenkrat ven tud z LEFT OUTER JOIN...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Visual C#] kako narediti vrstice?

Oddelek: Programiranje
91703 (1185) dbeong
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61131 (1007) detroit
»

razložitev nekaterij elementov v visual studio 05

Oddelek: Programiranje
72105 (1910) darkolord
»

[ASP.NET]

Oddelek: Programiranje
61321 (1175) OmegaM
»

[C#] unboxing

Oddelek: Programiranje
61053 (943) noraguta

Več podobnih tem