Forum » Programiranje » [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?
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
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.
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...
Datareader je učinkovit, če iščeš 1. vrstico iz tabele v bazi. Za več vrstic je precej boljša Dataadapterjeva fill metoda...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Visual C#] kako narediti vrstice?Oddelek: Programiranje | 1703 (1185) | dbeong |
» | [Visual C#] TableAdapterOddelek: Programiranje | 1131 (1007) | detroit |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2105 (1910) | darkolord |
» | [ASP.NET]Oddelek: Programiranje | 1321 (1175) | OmegaM |
» | [C#] unboxingOddelek: Programiranje | 1053 (943) | noraguta |