laymouna98
Messages postés71Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention26 août 2009
-
18 nov. 2008 à 17:50
Riddenbest
Messages postés2Date d'inscriptionvendredi 21 novembre 2008StatutMembreDernière intervention 9 avril 2010
-
9 avril 2010 à 16:38
salut à tous
je souhaite savoir comment je peut récupérer la dernière enregistrement d'une table de la base de données
je travail avec Nhibernate, C# et Sql server 2005
yannickiwi
Messages postés22Date d'inscriptionvendredi 2 novembre 2007StatutMembreDernière intervention16 décembre 2008 19 nov. 2008 à 10:11
Salut,
Je ne connais pas Nhibernate, mais il me semble que dans les requete SQL (donc en touchant linq pour c#), tu as une fonction pour récupéré le dernier enregistrement de ce style:
var p = (from c in taTable select new { Nom c.lastName, Prenom c.firstName }.Last()
);
Riddenbest
Messages postés2Date d'inscriptionvendredi 21 novembre 2008StatutMembreDernière intervention 9 avril 2010 9 avril 2010 à 16:38
BONJOUR TOUT LE MONDE ,
je suis débutant en NHibernate je commence ma premiere application en C# et SQL Server 2005 j'utilise NHibernate comme je vient le mentionner au début lorsque je compile mon application il ya une exeception qui m'affiche [NHibernate.Mappingexception:Could not instanciate Dialect Class ....]s'il y a une presonne qui peut m'aider n'haisitez pas c'est urgent pour moi
Merci d'avance !!
voici les fichier de mon projet:
App.config <?xml version= "1.0" encoding="utf-8" ?>
<!-- Sélectionnez le type de base de donnée à utiliser et définissez sa ChaîneDeConnexion -->
<!-- Valeurs possibles: Access, MSSQL ou MySQL -->
<!-- Cette section contient les informations nécessaires à la configuration de log4net -->
<log4net>
<!-- Définie une sortie (où les textes de débogage peuvent aller) -->
<!-- Définie la catégorie racine, son niveau de priorité par défaut et ajoute le(s) sortie(s) (où les textes de débogage vont aller) -->
<root>
</root>
<!-- Spécifie le niveau de certain namespaces -->
<!-- Le niveau peut être : ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
<logger name="NHibernate">
<level value="INFO" />
</logger>
</log4net>
</configuration>
DBase_Connection.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate.Cfg;
using NHibernate.Mapping.Attributes;
using log4net;
using NHibernate_testC1.Domain;
namespace NHibernate_testC1
{
class DBase_connection
{private NHibernate.ISessionFactory _sessionFactory;
/// <summary> Configuration de l'accès à la base de données. </summary>
public DBase_connection(string baseDeDonnées, string chaîneDeConnexion)
{
System.Console.Out.WriteLine("Configuration de NHibernate...\n");
// Active l'inscription des informations de débogages sur les opérations de NHibernate
log4net.Config.XmlConfigurator.Configure();
// Crée l'objet qui contiendras les informations de configuration
// et assigne les informations pour accéder à la base de données
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider");
System.Console.Out.WriteLine("Utilise la base de données: <" + baseDeDonnées
+ ">\nChaîneDeConnexion: <" + chaîneDeConnexion + ">\n");
// Utilise NHibernate.Mapping.Attributes pour créer les informations sur les entités
System.IO.MemoryStream flux = new System.IO.MemoryStream(); // Contenant des informations
NHibernate.Mapping.Attributes.HbmSerializer.Default.Validate = true; // Active la validation (optionnel)
// Demande à NHibernate d'utiliser les champs et non les propriétés (dans les entités)
NHibernate.Mapping.Attributes.HbmSerializer.Default.HbmDefaultAccess = "field.camelcase-underscore";
// Récupère les informations à partir de cette assemblée (peut aussi être fait classe par classe)
System.Console.Out.WriteLine("NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize()...\n");
NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(flux, System.Reflection.Assembly.GetExecutingAssembly());
flux.Position = 0;
cfg.AddInputStream(flux); // Envoi les informations de Mappage à la Configuration de NHibernate
flux.Close();
// Créé le(s) table(s) dans la base de données pour les entités
System.Console.Out.WriteLine("new NHibernate.Tool.hbm2ddl.SchemaExport(cfg).Create()...");
new NHibernate.Tool.hbm2ddl.SchemaExport(cfg).Create(true, true);
// Construit la "fabrique de sessions"
System.Console.Out.WriteLine("\n\nsessionFact = cfg.BuildSessionFactory();\n\n");
_sessionFactory = cfg.BuildSessionFactory();
}
/// <summary> Création et enregistrement de 'n' commandes aléatoires. </summary>
public void GénèreDesUtilisateursAléatoires(int n)
{
NHibernate.ISession session = null;
NHibernate.ITransaction transaction = null;
System.Console.Out.WriteLine("\nEnregistrement de " + n + " commandes aléatoires...");
try
{
session = _sessionFactory.OpenSession();
transaction = session.BeginTransaction();
// Envoie les modifications (=> Génère et exécute les requêtes)
transaction.Commit();
}
catch
{
if(transaction != null)
transaction.Rollback(); // Erreur => nous DEVONT annuler les modifications
throw; // Ici, nous renvoyons la même exception pour qu'elle soit gérée (imprimée)
}
finally
{
if(session != null)
session.Close();
}
}
/// <summary> Pour chaque commande (dans la base de données), impression de son identificateur, sa date et le nom du produit. </summary>
public void AfficheToutesLesUtilisateurs()
{
using(NHibernate.ISession session = _sessionFactory.OpenSession())
{
System.Collections.IList résultat = session.Find("select u.Id, u.Nom, u.Prenom from Users u");
System.Console.Out.WriteLine("\n" + résultat.Count + " utilisateurs trouvées!");
foreach(System.Collections.IList l in résultat)
System.Console.Out.WriteLine(" Utilisateur N°"
+ l[0] + ", Nom=" + l[1] + ", Prernom=" + l[2]);
} // finally { session.Close(); } est réalisé par using()
}
/// <summary> Renvoi de la commande N° 'id'. </summary>
public Users ChargeUnUtilisateur(int id)
{
System.Console.Out.WriteLine("\nChargement de l'Utilisateur N° " + id + "...");
using(NHibernate.ISession session = _sessionFactory.OpenSession())
return session.Load(typeof(Users), id) as Users;
// finally { session.Close(); } est réalisé par using()
}
/// <summary> Affichage de la commande sur la console. </summary>
public void Affiche(Users u)
{
System.Console.Out.WriteLine("\nUser N°"
+ u.Id + "\n Nom = " + u.Nom + "\n Prenom=" + u.Prenom);
}
/// <summary> Insertion ou mise à jour de la commande (dans la base de données). </summary>
public void Sauvegarde(Users u)
{
NHibernate.ISession session = null;
NHibernate.ITransaction transaction = null;
// Voici comment la Session décide d'insérer ou de mettre à jour; utilisez NHMA.Id(UnsavedValue=x) pour remplacer 0
System.Console.Out.Write("\n" + (u.Id == 0 ? "Insertion" : "Mise à jour"));
System.Console.Out.WriteLine(" l'Utilisateur N° " + u.Id + "...");
try
{
session = _sessionFactory.OpenSession();
transaction = session.BeginTransaction();
// La Session NHibernate vas automatiquement détecter si elle doit effectuer un INSERT ou un UPDATE
session.SaveOrUpdate(u);
// Envoie les modifications (=> Génère et exécute les requêtes)
transaction.Commit();
}
catch
{
if(transaction != null)
transaction.Rollback(); // Erreur => nous DEVONT annuler les modifications
throw; // Ici, nous renvoyons la même exception pour qu'elle soit gérée (imprimée)
}
finally
{
if(session != null)
session.Close();
}
}
/// <summary> Effacement de la commande (dans la base de données). </summary>
public void Détruit(int id)
{
NHibernate.ISession session = null;
NHibernate.ITransaction transaction = null;
System.Console.Out.WriteLine("\nEffacement de l'Utilisateur N° " + id + "...");
try
{
session = _sessionFactory.OpenSession();
transaction = session.BeginTransaction();
session.Delete("from Users where u.Id = :Id", id, NHibernate.NHibernateUtil.Int32);
// Envoie les modifications (=> Génère et exécute les requêtes)
transaction.Commit();
}
catch
{
if(transaction != null)
transaction.Rollback(); // Erreur => nous DEVONT annuler les modifications
throw; // Ici, nous renvoyons la même exception pour qu'elle soit gérée (imprimée)
}
finally
{
if(session != null)
session.Close();
}
}
}
}
Users.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate.Mapping.Attributes;
namespace NHibernate_testC1.Domain
{
[NHibernate.Mapping.Attributes.Class(Table = "Users")]
class Users
{
private int _id = 0;
private string _Nom;
private string _Prenom;
[NHibernate.Mapping.Attributes.Id(Name = "Id")]
[NHibernate.Mapping.Attributes.Generator(1, Class = "native")]
public virtual int Id
{
get { return _id; }
}
[NHibernate.Mapping.Attributes.Property]
public virtual string Nom
{
get { return _Nom; }
set { _Nom = value; }
}
[NHibernate.Mapping.Attributes.Property]
public virtual string Prenom
{
get { return _Prenom; }
set { _Prenom = value; }
}
public Users(string nom, string prenom)
{
this.Nom = nom;
this.Prenom = prenom; // Ne pas utiliser _prenom
}
public Users()
{
}
}
}
Users.hbm.XML
<?xml version ="1.0" encoding= "utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernate_testC1"
namespace="NHibernate_testC1.Domain">
<!-- more mapping info here -->
<class name="Users" table="Users" dynamic-update="true">
<generator class="identity" />
</class>
</hibernate-mapping>
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Config;
using NHibernate_testC1.Domain;
namespace NHibernate_testC1
{
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
class Program
{
static void Main(string[] args)
{
System.Console.Out.WriteLine("L'application démarre...\n");