webservice og executereader
Hejsa allesammenJeg har et lille problem med en webservice som bruger en database.
Første gang jeg kører getListe virker det uden problemer, men anden gang får jeg denne fejl.
"System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is Closed."
Min kode i classen der håndterer database tilgangen ser sådan her ud.
using System;
using System.Data;
using System.Data.OleDb;
namespace fodboldService
{
/// <summary>
/// Summary description for AccesDB.
/// </summary>
public class AccesDB
{
// public string connectionString = "Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=\"" + System.Web.HttpContext.Current.Server.MapPath("fodbold.mdb") + "\";Jet OLEDB:Engine Type=5;Provider=\"Microsoft.Jet.OLEDB.4.0\";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
public OleDbConnection dbconn = new OleDbConnection("Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=\"" + System.Web.HttpContext.Current.Server.MapPath("fodbold.mdb") + "\";Jet OLEDB:Engine Type=5;Provider=\"Microsoft.Jet.OLEDB.4.0\";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1");
private static OleDbCommand dbCmd;
private void Open()
{
if(dbconn.State.ToString().CompareTo("Open")!=0)
dbconn.Open();
}
public void Close()
{
dbconn.Close();
}
public OleDbCommand GetDbCommand(string sql)
{
if(dbconn.State.ToString().CompareTo("Open")!=0)
Open();
if (dbCmd == null)
{
dbCmd = new OleDbCommand("",dbconn);
}
dbCmd.CommandText = sql;
return dbCmd;
}
}
}
og fejlen forekommer i denne linie
dbReader = dbCmd.ExecuteReader()
i denne klasse
using System;
using System.Collections;
using System.Data;
using System.Data.OleDb;
namespace fodboldService
{
/// <summary>
/// Summary description for KampeDB.
/// Denne klasse står for interaktionen med tabellen kampe i databasen
/// </summary>
public class KampeDB
{
//Controller c;
private static OleDbCommand dbCmd = null;
private AccesDB adb = new AccesDB();
public KampeDB()
{
}
public void deleteAll()
{
// Skal slette alt indhold fra holdNavn
string sql = "delete * from kampe";
OleDbCommand cmd = adb.GetDbCommand(sql);
cmd.ExecuteNonQuery();
adb.Close();
}
public ArrayList getAll()
{
ArrayList alleKampe = new ArrayList();
string sql = "SELECT kampe.RundeID, holdNavn.holdNavn, holdNavn_1.holdNavn, kampe.hjemmemaal, kampe.udemaal FROM (holdNavn INNER JOIN kampe ON holdNavn.holdId = kampe.hjemmehold) INNER JOIN holdNavn AS holdNavn_1 ON kampe.udehold = holdNavn_1.holdId;";
dbCmd = adb.GetDbCommand(sql);
IDataReader dbReader;
dbReader = dbCmd.ExecuteReader();
Kamp k;
while(dbReader.Read())
{
k = new Kamp(int.Parse(dbReader["rundeid"].ToString()),dbReader["holdNavn.holdNavn"].ToString(),dbReader["holdNavn_1.holdNavn"].ToString(), int.Parse(dbReader["hjemmemaal"].ToString()), int.Parse(dbReader["udemaal"].ToString()));
alleKampe.Add(k);
}
adb.Close();
return alleKampe;
}
public ArrayList getAllFraEnRunde(int runde)
{
ArrayList alleKampe = new ArrayList();
string sql = "SELECT kampe.RundeID, holdNavn.holdNavn, holdNavn_1.holdNavn, kampe.hjemmemaal, kampe.udemaal FROM (holdNavn INNER JOIN kampe ON holdNavn.holdId = kampe.hjemmehold) INNER JOIN holdNavn AS holdNavn_1 ON kampe.udehold = holdNavn_1.holdId where rundeid = " + runde + ";";
dbCmd = adb.GetDbCommand(sql);
IDataReader dbReader;
dbReader = dbCmd.ExecuteReader();
Kamp k;
while(dbReader.Read())
{
k = new Kamp(int.Parse(dbReader["rundeid"].ToString()),dbReader["holdNavn.holdNavn"].ToString(),dbReader["holdNavn_1.holdNavn"].ToString(), int.Parse(dbReader["hjemmemaal"].ToString()), int.Parse(dbReader["udemaal"].ToString()));
alleKampe.Add(k);
}
adb.Close();
return alleKampe;
}
}
}
Nogen der kan se hvad jeg gør galt?
