用Nhibernate怎么实现数据的添加、删除、修改简单程序
2024-07-21 02:23:32
供稿:网友
一、创建数据库
数据库名:nhibernate
use nhibernate
go
create table users (
logonid nvarchar(20) not null default '0',
name nvarchar(40) default null,
password nvarchar(20) default null,
emailaddress nvarchar(40) default null,
primary key (logonid)
)
go
数据表:users
二、总体介绍
项目名:webnhibernate
界面:webform.aspx
具体表现文件:webform.aspx.cs
实体类文件:entityclass.cs
映射文件:userhbm.xml
配置文件:web.config
三、创建web界面
类型
对象名
text属性值
label
label1
id:
label
label2
姓名:
label
label3
密码:
label
label4
email:
label
labmessage
textbox
txtid
textbox
txtname
textbox
txtpassword
textbox
txtemail
button
butsave
添加
button
butdel
删除
button
butupdata
修改
四、创建映射文件(xml文件)和实体类
实体类
using system;
namespace webnhibernate
{
public class entityclass
{
private string id;
private string username;
private string password;
private string emailaddress;
public entityclass()
{}
public string id
{
get { return id; }
set { id = value; }
}
public string username
{
get { return username; }
set { username = value; }
}
public string password
{
get { return password; }
set { password = value; }
}
public string emailaddress
{
get { return emailaddress; }
set { emailaddress = value; }
}
}
}
映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="webnhibernate.entityclass, webnhibernate" table="users">
<id name="id" column="logonid" type="string" length="20">
<generator class="assigned" />
</id>
<property name="username" column= "name" type="string" length="40"/>
<property name="password" type="string" length="20"/>
<property name="emailaddress" type="string" length="40"/>
</class>
</hibernate-mapping>
注意点:
1.<class name="webnhibernate.entityclass, webnhibernate" table="users">
webnhibernate.entityclass代表:实体类名
webnhibernate代表:该项目的装配集名称
users代表:数据表名
2.当属性列表<property name=”” column=””/>中既有name和column说明实体层的属性与数据表的字段名不同名
3.指定一个id, 在数据表中就是主键, 这个非常重要,nhibernate就是通过id来判断对象的唯一性的.
五、在配置文件中添加配置内容
1.首先在配置文件的<configuration>代码下面添加如下代码
<configsections>
<section name="nhibernate" type="system.configuration.namevaluesectionhandler, system, version=1.0.3300.0,culture=neutral, publickeytoken=b77a5c561934e089" />
</configsections>
这一段代码是必须要的
2.在配置文件的</system.web>代码下面添加如下代码
<nhibernate>
<!—连接数据提供者 -->
<add
key="hibernate.connection.provider"
value="nhibernate.connection.driverconnectionprovider"
/>
<!—连接数据方言最常用的是mssql2000dialect -->
<add
key="hibernate.dialect"
value="nhibernate.dialect.mssql2000dialect"
/>
<!—连接数据驱动类-->
<add
key="hibernate.connection.driver_class"
value="nhibernate.driver.sqlclientdriver"
/>
<!—连接数据库-->
<add
key="hibernate.connection.connection_string"
value="server=yanfa1;initial catalog=nhibernate;user id=sa;password=8626798;"
/>
</nhibernate>
六、实现代码
首先在文件头添加代码
using nhibernate;
using nhibernate.cfg;
1.添加数据:
双击“添加“按钮
private void butsave_click(object sender, system.eventargs e)
{
mcfg=new configuration();//创建配置类
mcfg.addxmlfile (system.web.httpcontext.current.server.mappath("userhbm.xml"));//指明映射文件userhbm.xml
entityclass ventity=new entityclass();
ventity.id=txtid.text;
ventity.username=txtname.text;
ventity.password=txtpassword.text;
ventity.emailaddress=txtemail.text;
isession vsession= mcfg.buildsessionfactory().opensession();//创建会话工厂, 一般来说应该使用一个单例对象来封装会话工厂.
itransaction vtransaction = vsession.begintransaction();//创建事物处理
try
{
vsession.save(ventity);//向数据库添加数据
vtransaction.commit();
labmessage.text="ok";
}
catch(exception ex)
{
vtransaction.rollback();
labmessage.text="error"+ex.tostring();
}
finally
{
vsession.close();
}
}
2.删除数据:
双击“删除“按钮
private void butdel_click(object sender, system.eventargs e)
{
mcfg=new configuration();
mcfg.addxmlfile (system.web.httpcontext.current.server.mappath("userhbm.xml"));
isession vsession= mcfg.buildsessionfactory().opensession();
itransaction vtransaction = vsession.begintransaction();
try
{
entityclass ventity=(entityclass) vsession.load(typeof(entityclass),txtid.text);//查找数据表中所要记录
vsession.delete(ventity);//向数据库删除数据
vtransaction.commit();
labmessage.text="ok";
}
catch(exception ex)
{
vtransaction.rollback();
labmessage.text="error";
}
finally
{
vsession.close();
}
}
3.修改代码:
双击“修改“按钮
private void butupdata_click(object sender, system.eventargs e)
{
mcfg=new configuration();
mcfg.addxmlfile (system.web.httpcontext.current.server.mappath("userhbm.xml"));
isession vsession= mcfg.buildsessionfactory().opensession();
itransaction vtransaction = vsession.begintransaction();
try
{
entityclass ventity=(entityclass) vsession.load(typeof(entityclass),txtid.text);
ventity.username=txtname.text;
ventity.password=txtpassword.text;
ventity.emailaddress=txtemail.text;
vsession.update(ventity); //向数据库修改数据
vtransaction.commit();
labmessage.text="ok";
}
catch(exception ex)
{
vtransaction.rollback();
labmessage.text="error";
}
finally
{
vsession.close();
}
}
因本人也是刚接触nhibernate不久,还有好多技术难点不怎么明白,还需多加努力,愿与大家一起探讨。