DavidBMedlem sedan jan. 20001 372 inlägg har följande kod som skall hämta ut en sträng från min MySQL databas:
<script language="C#" runat="server">
protected void Page_Load(Object Src, EventArgs E) {
Label1.Text = GetDataReader("SELECT username From Users where id = 1").GetString(0);
}
OdbcConnection objConn = new OdbcConnection("Driver={MySQL};Database=db");
private OdbcCommand CreateSqlCommand(String strSQL){
OdbcCommand SqlCommand = new OdbcCommand(strSQL,objConn);
return SqlCommand;
}
protected OdbcDataReader GetDataReader(String strSQL){ // Returnerar en DataReader
try{
OdbcCommand SqlCommand = CreateSqlCommand(strSQL);
objConn.Open();
OdbcDataReader objDataReader = SqlCommand.ExecuteReader();
return objDataReader;
} finally{
}
}
</script>
<asp:Label id="Label1" runat="server" />
får följande fel:
System.InvalidOperationException: No data exists for the row/column.
vad jag fattar det som är att det inte finns nån data i fältet man försöker hämta ifrån. dock är det lite konstigt att om jag kör SQL koden på en vanlig ASP sida eller i MySQL Front så fungerar det?
Nån som ser om jag gjort nåt fel?
Sen undrar jag även hur jag skall göra för att stänga databaskopplingen, om jag hade hämtat ett DataSet så hade jag ju stängt den i "finally" men detta fungerar ju inte om jag använder en DataReader.
PMedlem sedan jan. 20012 204 inlägg det ska inte vara 'runt 1'?
DavidBMedlem sedan jan. 20001 372 inlägg det är väl inga ' runt 1, eller?
det är alltså inget fel på SQL koden eftersom den funkar att använda från andra program
/r
Detta var inlägg nr 1000 skrivet av mig :bire :birp
DavidBMedlem sedan jan. 20001 372 inlägg hmmm, har fått det att fungera nu men jag är lite fundersam över min lösning:
protected OdbcDataReader GetDataReader(String strSQL){
try{
OdbcCommand SqlCommand = CreateSqlCommand(strSQL);
objConn.Open();
OdbcDataReader objDataReader = SqlCommand.ExecuteReader();
[b]if(objDataReader.Read()) {
}[/b]
return objDataReader;
} catch(Exception e) {
throw;
} finally{
}
}
det krävs alltså att man har en If sats eller en loop innan man returnerar datan även om denna är helt onödig i själva koden. någon som har en förklaring till detta?
renholmMedlem sedan apr. 20012 266 inlägg Grejen är inte att du behöver ha en if-sats eller loop direkt, det är att du måste visa att du vill börja läsa och det gör man med objDataReader.Read(). Då ställs "markören" på rad ett och visar vad som finns där. För att hoppa till rad 2 kör du bara .Read() igen.
btw, grattis till 1000 inlägg :birp
DavidBMedlem sedan jan. 20001 372 inlägg tror inte jag fattade riktigt ändå:
protected OdbcDataReader GetDataReader(String strSQL){
try{
OdbcCommand SqlCommand = CreateSqlCommand(strSQL);
objConn.Open();
OdbcDataReader objDataReader = SqlCommand.ExecuteReader();
[b]objDataReader.Read();[/b]
return objDataReader;
} catch(Exception e) {
throw;
} finally{
}
}
så koden borde se ut nåt liknande koden ovan? får det dock bara inte att fungera.