Je travaille sur un jeu de cartes qui utilise une base de données pour stocker et récupérer des cartes. Malheureusement, j'ai de la difficulté à récupérer les données de la base de données.SqlCeDataReader Read() return false
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CardGame
{
class Program
{
static void Main(string[] args)
{
Card c = new Card();
Card d;
c.Name = "TestCard";
c.Pack = "Pack";
c.Value = 5;
c.Color = Colors.green;
c.Description = "Describing stuff";
//Database.CreateCardTable(); (Already created)
Database.InsertCard(c);
d = Database.RetrieveCard("TestCard");
Console.WriteLine(d.Name);
Console.ReadLine();
}
}
}
Database.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;
using System.Data.SqlClient;
namespace CardGame
{
class Database
{
public static void CreateCardTable()
{
string sqlStr;
SqlCeConnection CardConn = new SqlCeConnection(Properties.Settings.Default.CardsConnectionString);
sqlStr = "CREATE TABLE Data " +
"(Name NVARCHAR(50), " +
"Pack NVARCHAR(50), " +
"Value INT, " +
"Color INT," +
"Description NVARCHAR(200))";
SqlCeCommand CardComm = new SqlCeCommand(sqlStr, CardConn);
try
{
CardConn.Open();
CardComm.ExecuteNonQuery();
Console.WriteLine("Tables Created Successfully!");
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine("Error creating tables.");
}
finally
{
if (CardConn.State == ConnectionState.Open)
{
CardConn.Close();
}
}
}
public static void InsertCard(Card c)
{
SqlCeConnection CardConn = new SqlCeConnection(Properties.Settings.Default.CardsConnectionString);
try
{
CardConn.Open();
SqlCeCommand insertCommand = new SqlCeCommand("INSERT INTO Data VALUES(@Name, @Pack, @Value, @Color, @Description)", CardConn);
insertCommand.Parameters.Add("Name", c.Name);
insertCommand.Parameters.Add("Pack", c.Pack);
insertCommand.Parameters.Add("Value", c.Value);
insertCommand.Parameters.Add("Color", c.Color);
insertCommand.Parameters.Add("Description", c.Description);
Console.WriteLine("Card inserted successfully");
}
catch
{
Console.WriteLine("Some kind of error.");
}
finally
{
if (CardConn.State == ConnectionState.Open)
{
CardConn.Close();
}
}
}
public static Card RetrieveCard(string name)
{
Card c = new Card();
SqlCeConnection CardConn = new SqlCeConnection(Properties.Settings.Default.CardsConnectionString);
try
{
CardConn.Open();
SqlCeCommand retrieveCommand = new SqlCeCommand("SELECT * FROM Data WHERE [email protected]", CardConn);
retrieveCommand.Parameters.Add("Name", name);
SqlCeDataReader reader = retrieveCommand.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("Reader: " + reader["Name"].ToString());
c.Name = (string)reader["Name"];
//read rest
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
return c;
}
public void CreateAccountDB(string DBName)
{
}
}
}
Quand je lance la carte d'insertion je reçois un message de réussite (à la fin de l'instruction try). Quand je fais Database.RetrieveCard("TestCard");
il atteint la ligne while (reader.Read())
mais mon programme n'atteint pas le code à l'intérieur de l'instruction while. Comment puis-je corriger mon code pour pouvoir lire les cartes de la base de données?
peut-u vérifier que renvoie les données de la requête? –