webForumDet fria alternativet

Datareader

5 svar · 628 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

Tjenare, jag har denna kod....

                OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["floorball"].ConnectionString);
                string sql = "SELECT pk_id FROM tbl_week WHERE pk_id="+txtDate.SelectedValue;
                OleDbCommand cmd = new OleDbCommand(sql, con);
                cmd.Connection.Open();
                OleDbDataReader dr = cmd2.ExecuteReader(CommandBehavior.CloseConnection);
                if(dr2.HasRows){
                    [b]Response.Write(dr2[0]);[/b]
                }

Men jag får "System.InvalidOperationException: No data exists for the row/column." på den feta raden. Någon som har ett snabbt svar?

Jag har testat Sql:en och jag får ut data av den....

mv icaaq

ZaimanMedlem sedan dec. 20014 239 inlägg
#2

Har för mig att man måste "läsa in" raden först, innan du kan skriva ut den.

dr.Read();
icaaqMedlem sedan okt. 20005 273 inlägg
#3

Tack, det var ett tag sedan jag höll på med detta..

mv icaaq

GladhMedlem sedan maj 20012 812 inlägg
#4

icaaq skrev:

if(dr2.HasRows){
Response.Write(dr2[0]);

Om du använder dig av dr2.Read() så behöver du inte använda dig av HasRows eftersom Read returnerer true om det finns något att läsa, och false om inget finns.

                if(dr2.Read()){
                    Response.Write(dr2[0]);
                }

Sedan så är det väldigt ANTI-.NET att använda sig av Response.Write i ASP.NET, du skall istället ha en Label som du sätter värdet till.

Dessutom om du bara skall ha ut ett enda värde från databasen så är det lite overkill att använda ExecuteReader, så fall är det bättre med ExecuteScalare, som kommer att returnera ditt pk_id som ett object till dig.

                OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["floorball"].ConnectionString);
                string sql = "SELECT pk_id FROM tbl_week WHERE pk_id="+txtDate.SelectedValue;
                OleDbCommand cmd = new OleDbCommand(sql, con);
               try{
                cmd.Connection.Open();
                object pkID = cmd2.ExecuteScalare();
                
                lblMyPKID.Text = pkID.ToString();
}finally{
cmd.Connection.Close();
}
                }
TravoniMedlem sedan okt. 20041 556 inlägg
#5

... det heter ExecuteScalar och inget annat. ;)

freguzMedlem sedan feb. 2005280 inlägg
#6

Redigerat med anledning av webForums regler §4.
Synpunkter angående detta beslut, ta kontakt med Zaiman alternativt forumledare@webforum.nu.

Zaiman
Moderator, webForum

127 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)