Jag skulle lägga upp min hemsida på mitt webbhotell för att kolla så allt fungerade. Jag körde innan med MySQL databasen på min dator. Men ska använda databasen på mitt webbhotell.
Problemet ligger i när man ska använda databasen då får jag detta felmeddelande:
System.ObjectDisposedException: Cannot access a closed Stream.
Kod:
protected void MemberLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
using (MySqlConnection objConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString))
{
objConnection.Open();
using (MySqlCommand objCommand = new MySqlCommand("", objConnection))
{
objCommand.CommandText = "SELECT intID, strRole, intBanned FROM tblMembers WHERE strUsername = ?strUsername AND strPassword = ?strPassword";
objCommand.Parameters.Add(new MySqlParameter("?strUsername", tbUsername.Text));
objCommand.Parameters.Add(new MySqlParameter("?strPassword", tbPassword.Text));
//Fixar lite saker
}
objConnection.Close();
}
}
}
Vad gör jag för fel? Kan tillägga att på mitt webbhotell så har de MySQL 4.0.18 och hemma på datorn har jag den nyaste.
Vet inte om det är det som är felet men jag har upptäckt att vid användning av using uppstår problem ibland. Iaf när jag som du kör lokalt har det fungerat med inte på hotellet.
Har då gjort om det till try/catch/finally vilket motsvarar using å vips så fungerar det.
Prova ifall det fungerar för dig...
Det är förmodligen något annat fel men det skadar inte att prova.
Icke sa nicke, när jag kör med try/catch så kommer felmeddelandet fortfarande fast sidan visas allt som är innan kodenraden objConnection.Open(); kommer. Felmeddelandet kommer högst upp på sidan är ser ut typ så här:
Cannot access a closed Stream.: at System.IO.__Error.StreamIsClosed() at System.IO.BufferedStream.WriteByte(Byte value) at MySql.Data.MySqlClient.MySqlStream.WriteHeader() at MySql.Data.MySqlClient.MySqlStream.Write(Byte[] buffer, Int32 offset, Int32 count) at MySql.Data.MySqlClient.NativeDriver.ExecuteCommand(DBCmd cmd, Byte[] bytes, Int32 length) at MySql.Data.MySqlClient.NativeDriver.SetDatabase(String dbName) at MySql.Data.MySqlClient.MySqlConnection.ChangeDatabase(String database) at MySql.Data.MySqlClient.MySqlConnection.Open() at LinkopingLife._Loggout.Page_Load(Object sender, EventArgs e) in c:\Documents and Settings\Micke\Mina dokument\Visual Studio 2005\WebSites\LL\Loggout.aspx.cs:line 31
Det kan även vara jag som har fattat det fel med try/catch har aldrig använt det förut. Jag gjorde så här:
try{
//all kod som vanligt med using.
}
catch (Exception ex)
{
Response.Write(ex.Message + ": " + ex.StackTrace);
}
Hm, nu har jag inte jobbat med en MySql-server, så jag vet inte vilka fel meddelanden det kan ge specifikt. Men har du kollat så du har rätt connectionstring för anslutningen?
Ett tips är även att helt skippa using () och instansiera objektet "som vanligt".
Connectionstringen är rätt!
Varför ska s´jag skippa using () helt? Jag tycker att det är betydligt sexigare när man har så men jag kanske har fel. Vad gör det för skillnad? Nu har jag enbart så för det är skönare för ögonen.
Eller det fungerade inte alls, om jag körde med min server och webbhotellets databas så funkade det. körde jag bara med webbhotellet så funkade det ej. :(
Eftersom du läser upp strängen från web.config, kan du prova med att hårdkoda in anslutningssträngen på hotellet? Bara för att se att den öppnar anslutningen till databasen.
Det verkar i alla fall som om anslutningssträngen inte är korrekt på hotellet.