Avatar billede -xyz- Nybegynder
05. april 2006 - 11:39 Der er 13 kommentarer og
1 løsning

Access problem

Hej jeg har et problem med min access database, jeg bliver ved med at få følgende fejl:
System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed.
  at System.Data.OleDb.OleDbConnection.CheckStateOpen(String method)
  at System.Data.OleDb.OleDbCommand.ValidateConnection(String method)
  at System.Data.OleDb.OleDbCommand.ValidateConnectionAndTransaction(String method)
  at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
  at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
  at System.Data.OleDb.OleDbCommand.ExecuteReader()
  at GetIngrediensService.GetIngrediens(String prefix, Int32 maxResults) in c:\Documents and Settings\Kenneth\Dokumenter\Visual Studio 2005\WebSites\ShoppingAssistant\App_Code\GetIngrediensService.cs:line 31

Kode:


public string[] GetIngrediens(string prefix, int maxResults) {
        string[] items = new string[maxResults];
       
        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source=" + Server.MapPath("App_Data/ShoppingAssistant.mdb"));

        OleDbCommand cmd = new OleDbCommand("SELECT [Ingrediensen] FROM Ingrediens WHERE [Ingrediensen] LIKE '" + prefix + "*' ORDER BY [Ingrediensen];", conn);
       
        conn.Open();
        OleDbDataReader reader = cmd.ExecuteReader(); //LINIE 31!!!
        int i = 0;
        while (reader.Read())
        {
            if (i >= maxResults)
                break;
            items[i] = reader.GetString(0);
            i++;
        }
        conn.Close();
        return items;
    }
Avatar billede spaceus Nybegynder
05. april 2006 - 13:17 #1
ja umiddelbart ser det ikke helt galt ud.. et par ting du kan prøve

at sætte conn efter initialisering

OleDbCommand cmd = new OleDbCommand("SELECT [Ingrediensen] FROM Ingrediens WHERE [Ingrediensen] LIKE '" + prefix + "*' ORDER BY [Ingrediensen];");
cmd.Connection = conn;

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source=" + Server.MapPath("App_Data/ShoppingAssistant.mdb"));

måske
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0; Data Source=" + Server.MapPath("App_Data\\ShoppingAssistant.mdb"));

ellers prøv med en absolut sti
Avatar billede -xyz- Nybegynder
05. april 2006 - 13:33 #2
Jeg har prøvet at sætte conn, efter initialisering, og hvis den ikke kunne finde databasen, ville den så ikke skrive det?
Avatar billede dr_chaos Nybegynder
05. april 2006 - 13:56 #3
prøv at udskrive
Server.MapPath("App_Data/ShoppingAssistant.mdb")
og se om det er den rigtige sti.
Avatar billede -xyz- Nybegynder
05. april 2006 - 14:10 #4
Det er den rigtige sti
Avatar billede -xyz- Nybegynder
05. april 2006 - 14:38 #5
Jeg har også prøvet at fjerne alle conditions, men det bliver det ikke bedre af
Avatar billede -xyz- Nybegynder
05. april 2006 - 14:40 #6
Det var den forkerte exception jeg pastede sry.

System.Data.OleDb.OleDbException: Der er ikke angivet nogen værdi for en eller flere krævede parametre.
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
  at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
  at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
  at System.Data.OleDb.OleDbCommand.ExecuteReader()
  at GetIngrediensService.GetIngrediens(String prefix, Int32 maxResults) in c:\Documents and Settings\Kenneth\Dokumenter\Visual Studio 2005\WebSites\ShoppingAssistant\App_Code\GetIngrediensService.cs:line 32
Avatar billede spaceus Nybegynder
05. april 2006 - 14:52 #7
Har du værdier i prefix og maxResults..
prøv med og se om det virker

OleDbCommand cmd = new OleDbCommand("SELECT [Ingrediensen] FROM Ingrediens");
Avatar billede -xyz- Nybegynder
05. april 2006 - 15:01 #8
Det har jeg prøvet, og jeg får samme fejl
Avatar billede -xyz- Nybegynder
05. april 2006 - 15:04 #9
Damn, prøvede lige igen, og nu virker det selvfølgelig, så altså er det mit where statement der er noget galt med, men det mærkelige er at jeg ikke får mogen fejl i access
Avatar billede -xyz- Nybegynder
05. april 2006 - 15:18 #10
Nu har jeg prøvet at fjerne ORDER BY Ingrediensen; men det hjælper ikke Altså må den være gal
HER:

WHERE Ingrediensen LIKE 't*'
Avatar billede dr_chaos Nybegynder
05. april 2006 - 17:36 #11
OleDbCommand cmd = new OleDbCommand("SELECT [Ingrediensen] FROM Ingrediens WHERE [Ingrediensen] LIKE '" + prefix + "%' ORDER BY [Ingrediensen]", conn);
Avatar billede -xyz- Nybegynder
05. april 2006 - 17:45 #12
Har fået det til at virke, jeg refererede til en kolonne der ikke eksisterede
Avatar billede dr_chaos Nybegynder
05. april 2006 - 17:50 #13
hehe
Avatar billede spaceus Nybegynder
05. april 2006 - 21:42 #14
hov vi hjalp hvor er vores point ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester