C# & nHibernate连接MySQL

目录

 

C#连接MySQL

C#连接

增删改查方法

NHibernate与MySql交互

配置

映射

创建session 增删改查

创建事务


C#连接MySQL

C#连接

首先在VS项目中添加MySql.Data引用,浏览

具体位置一般在C:\Program Files (x86)\MySQL\Connector NET\Assemblies\v4.0(根据项目框架进行选择)

namespace CSharp连接
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectStr =     
        "server=127.0.0.1;port=3306;database=mygamedb;user=**;password=**;sslmode=none;";
            MySqlConnection conn = new MySqlConnection(connectStr);
            try
            {
                conn.Open();
                Console.WriteLine("建立连接");
            }
            catch(Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                conn.Close();
            }
            Console.ReadKey();
        }
    }
}

增删改查方法

MySqlConnection

MySqlCommand

MySqlDataReader(获取查询数据)

MySqlCommand.ExecuteReader() 查询

MySqlCommand.ExecuteNonQuery()插入删除修改

MySqlCommand.ExecuteScalar()查询,返回单个值

 

//查询

string sql = "select * from users";
MySqlCommand cmd = new MySqlCommand(sql,conn);
MySqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
    Console.WriteLine(reader[0].ToString());//读取该行的第一个字段 object类型
    //也可以 reader.GetInt32(0) 字段索引 返回int
    // reader.GetString(1)则返回 string
    // reader.GetInt32("字段名")  GetString("字段名")
}

//插入

string sqlinsert = "insert into users(username,password) values('sfsdf','fssdf') ";
cmd = new MySqlCommand(sqlinsert, conn);
int result=cmd.ExecuteNonQuery();//返回影响的记录数

//单个查询

string sqlScalar="select count(*) from users"
cmd = new MySqlCommand(sqlScalar, conn);
object o = cmd.ExecuteScalar();
int count = Convert.ToInt32(o.ToString());
Console.WriteLien(count);

NHibernate与MySql交互

(主要是可以像操作对象一样去操作数据库的数据)

配置

项目配置,打开项目属性,修改好程序集和命名空间的名称

一样的添加MySql.Data引用.dll引用

引入NHibernate.dll 可以在解决方案资源管理器中对项目右键管理NuGet中搜索NHibernate直接下载

如果无法下载就到官网直接下载,解压找到这个文件添加到项目的引用即可。

xml文件配置,参考官网教程

添加一个新文件命名为 hibernate.cfg.xml 一定得这么命名,属性设置为始终复制

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    <!--数据库版本 MySQL5-->
    <property name="connection.driver_class">NHibernate.Driver.MySQLDataDriver</property>
    <!--使用的数据库 MySQLData-->
    <property name="connection.connection_string">Server=localhost;Database=mygamedb;User ID=**;Password=**;SslMode=none;</property>
    <!--配置连接数据库的信息-->
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

映射

数据库里一个表对应一个类,如users表建一个类User(命名自取),我把这些类放在一个文件夹下便于管理

namespace Photon.Model
{
    public class User
    {
        public virtual int Id { get; set; }
        public virtual string Username { get; set; }
        public virtual string Password { get; set; }
        public virtual DateTime Registerdate { get; set; }
    }
}

建一个映射的xml文件,命名最好和类名一致比较好找,后缀必须是 类名.hbm.xml ,可以把映射的xml都放在一个文件夹下

属性的生成操作设置为嵌入的资源 和类打包到程序集的

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Photon"
                   namespace="Photon.Model">
  <!--修改成对应的程序集和命名空间名称-->
  <class name="User" table="users"><!--name是类名,table就是数据库的表名-->
    <id name="Id" column="id" type="Int32"><!--主键,字段名,数据类型-->
      <generator class="native" /><!--自动增长-->
    </id>
    <property name="Username" column="username" type="String"/>
    <property name="Password" column="password" type="String"/>
    <property name="Registerdate" column="registerdate" type="Date"/>
  </class>

</hibernate-mapping>

创建session 增删改查

Session.Save();  

Session.Delete()

Session.Update()

using NHibernate;
using NHibernate.Cfg;
using Photon.Model;

namespace Photon
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();//解析hibernate.cfg.xml
            configuration.AddAssembly("Photon");
            Console.WriteLine("成功");

            ISessionFactory sessionFactory = null;//会话工厂
            ISession session = null;
            try
            {
                sessionFactory= configuration.BuildSessionFactory();
                session =sessionFactory.OpenSession();//打开一个跟数据库的会话

                User user = new User() { Username = "user1", Password = "user1" };
                session.Save(user);
            }
            catch(Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if(session!=null)
                {
                    session.Close();
                }
                if(sessionFactory!=null)
                {
                    sessionFactory.Close();
                }
            }
            Console.ReadKey();

        }
    }
}

创建事务

sessionFactory= configuration.BuildSessionFactory();
session =sessionFactory.OpenSession();//打开一个跟数据库的会话

ITransaction transaction=session.BeginTransaction();//开启事务
                
User user2 = new User() { Username = "user2", Password = "user2" };
User user1 = new User() { Username = "user1", Password = "user1" };
session.Save(user2);
session.Save(user1);

transaction.Commit();//事务提交,只有上面两个save操作都成功了才会写入数据库

transaction.Dispose();//也要关闭

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值