Nhibernate, sql serer 2005 et c#

Signaler
Messages postés
71
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
26 août 2009
-
Messages postés
2
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
9 avril 2010
-
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

merci pour votre aide

3 réponses

Messages postés
22
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
16 décembre 2008

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()
);

En espérant avoir pu t'aider !
Messages postés
22
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
16 décembre 2008

var p = (from c in taTable select new { Nom c.lastName, Prenom c.firstName }).Last());

Désolé, je t'ai donné une mauvaise requête avant ;)
Messages postés
2
Date d'inscription
vendredi 21 novembre 2008
Statut
Membre
Dernière intervention
9 avril 2010

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" ?>

<configuration>
<configSections>
<section
name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"
/>
</configSections>

<!-- 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) -->



<layout type="log4net.Layout.PatternLayout, log4net">
- %m%n" />
</layout>


<!-- 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");

if("Access" = = baseDeDonnées)
{
cfg.SetProperty(NHibernate.Cfg.Environment.Dialect, "NHibernate.JetDriver.JetDialect, NHibernate.JetDriver");
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, "NHibernate.JetDriver.JetDriver, NHibernate.JetDriver");
}
else if("MSSQL" == baseDeDonnées)
{
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(NHibernate.Cfg.Environment.Dialect, "NHibernate.Dialect.MsSql2005Dialect");
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, "NHibernate.Driver.SqlClientDriver");

}
else if("MySQL" == baseDeDonnées)
{
cfg.SetProperty(NHibernate.Cfg.Environment.Dialect, "NHibernate.Dialect.MySQLDialect");
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, "NHibernate.Driver.MySqlDataDriver");
}
else
throw new System.InvalidOperationException("La base de données '" + baseDeDonnées + "' est inconnue.");

cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, chaîneDeConnexion);


// 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();

for(int i=0; i<n; i++)
{
Users u = new Users();

u.Nom = "Ben Ahmed";
u.Prenom = "Raed";
session.Save(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> 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");

try
{
string baseDeDonnées = System.Configuration.ConfigurationSettings.AppSettings["BaseDeDonnées"];
string chaîneDeConnexion = System.Configuration.ConfigurationSettings.AppSettings[baseDeDonnées + ".ChaîneDeConnexion"];

DBase_connection DB = new DBase_connection(baseDeDonnées, chaîneDeConnexion);
DB.GénèreDesUtilisateursAléatoires(3);

DB.AfficheToutesLesUtilisateurs();


}
catch (System.Exception ex)
{
System.Console.Error.WriteLine("\n\n" + ex.ToString() + "\n\n");
System.Threading.Thread.Sleep(30000);
}
finally
{
System.Console.Out.WriteLine("\nL'application est fermée!\n");
System.Threading.Thread.Sleep(30000);
}


}
}
}

S'il vous plais je suis en attente répndez moi par la correction et ce ke je dois faire.
Merci ;)