Just nu i M3-nätverket
Gå till innehåll

Problem med Sqlce(SQL compact edition) i C#


GainerPRO

Rekommendera Poster

Försöker lära mig använda sql i C#. Tänkte eftersom jag bara ska använda databasen för att exprimentera så borde det räcka med sqlce som följer med C#. Dock har jag fått problem när jag ska försöka läsa ut en tabell från databasen. Har inga problem att lägga in data i databasen. Ser att datan finns i databasen.

 

När jag ska göra reader.Read() så verkar inte c# kunna hantera det ser meddelande i reader:

 

- HasRows '(reader).HasRows' threw an exception of type 'System.InvalidOperationException' bool {System.InvalidOperationException}

+ base {"SQL Server Compact does not support calls to HasRows property if the underlying cursor is not scrollable." System.SystemException {System.InvalidOperationException}

 

undantaget:

+ ex {"Object reference not set to an instance of an object."} System.Exception {System.NullReferenceException}

kastas när felet inträffar.

 

Försökte med:

 

cmd.ExecuteResultSet(ResultSetOptions.Scrollable); ]men verkar inte som det hjälpte. Någon som kan se något uppenbart fel? Eller någon annan lösning som jag skulle kunna använda mig av med sqlce?

 

 
   class Database
   {
       // Retrieve the connection string from the settings file.
       string conString = Properties.Settings.Default.MyDatabaseConnectionString;
       SqlCeConnection conn;

       private Random random = new Random();
       private QuestionCard[] dictionary;
       private QuestionCard currentQuestion { get; set; }

       public Database()
       {
           // Open the connection using the connection string.
           using ( conn = new SqlCeConnection( conString ) )
           {

               try
               {
                   conn.Open();
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Error has occured: " + ex.Message, "ERROR");
               }
               try
               {
                   int i = 0;

                   string select = "SELECT word1, word2, Comment, CorrectAnswers FROM dictionary";
                   SqlCeCommand cmd = new SqlCeCommand(select, conn);
                   cmd.ExecuteResultSet(ResultSetOptions.Scrollable);

                   SqlCeDataReader reader = cmd.ExecuteReader();
                   while( reader.Read())
                   {                 
                       dictionary[i] = new QuestionCard( reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), 0 );
                       i++;
                   }
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Error has occured: " + ex.Message, "ERROR");
               }

           }
    }
}
]

Länk till kommentar
Dela på andra webbplatser

Med ExecuteResultSet försöker jag bara sätta databasen till Scrollable men verkade inte som det gjorde någon skillnad.

 

Har försökt följa guiden på hxxp://vvv.dotnetperls.com/sqlce. Någon som kan se något som jag missat från den guiden? Någon som vet någon bättre guide för sqlce?

 

Har ändrat koden till

 

   class Database
   {
       // Retrieve the connection string from the settings file.
       string conString = Properties.Settings.Default.MyDatabaseConnectionString;
       SqlCeConnection conn;

       private Random random = new Random();
       private QuestionCard[] dictionary;
       private QuestionCard currentQuestion { get; set; }

       public Database()
       {
           // Open the connection using the connection string.
           using ( conn = new SqlCeConnection( conString ) )
           {

               try
               {
                   conn.Open();
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Error has occured: " + ex.Message, "ERROR");
               }
               try
               {
                   int i = 0;

                   string select = "SELECT word1, word2, Comment, CorrectAnswers FROM dictionary";
                   SqlCeCommand cmd = new SqlCeCommand(select, conn);
                   cmd.ExecuteResultSet(ResultSetOptions.Scrollable);

                   SqlCeDataReader reader = cmd.ExecuteReader();
                   while( reader.Read())
                   {                 
                       dictionary[i] = new QuestionCard( reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), 0 );
                       i++;
                   }
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Error has occured: " + ex.Message, "ERROR");
               }

           }
    }
}

Länk till kommentar
Dela på andra webbplatser

  • 6 months later...

Problemet var att jag hade glömt att initsiera variabelen QuestionCard. Fick lösningen i ett annat forum.

 

private QuestionCard[] dictionary = new QuestionCard[100];

 

Men tack ändå :)

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...