zoukankan      html  css  js  c++  java
  • 那些年,我还在学ADO.NET

    那些年我还在学ADO.NET

      那些年学习了ASP.NET后又开始学习ASP.NET的新知识,ADO.NET用于访问数据库,一般可以分为连接模式和非连接模式。连接模式指的是在访问数据时,一直与数据库保持连接,访问完数据后才与数据库断开连接,主要采用的ADO.NET对象是Connection、Command、DataReader等;连接模式指的是通过数据集的方式对数据库进行操作,将数据读到内存中,从而完成数据的操作,数据集会自动更新到数据库,主要采用ADO.NET对象是DataAdapter、DataSet等。下面的我们就来看一下代码吧。

       本示例代码采用工厂模式的方式,这样就可以达到只改变少量的代码完成数据库之间的切换,工厂模式是要采用的对象有以下几个:DbProviderFactory、DbConnection、DbTransaction

    、DbCommand、DbDataReader、DbDataAdapter、DbCommandBuilder等。

     

    1、 共同的连接串

     

     string ProviderName = "System.Data.SqlClient";
            string ConnStr = "Data Source=.;Initial Catalog=Northind;Integrated Security=True";
            string sqlStr = "select * from dbo.Categories";
    

     

    2、 非连接模式代码如下:

     

     public void getSqlConnection()
    
            {
    
                //得到一个数据提供者,根据其传入的数据提供者对象
    
                DbProviderFactory dbf = DbProviderFactories.GetFactory(ProviderName);
    
                //创建连接
    
                DbConnection conn = dbf.CreateConnection();
    
                //连接字符串
    
                conn.ConnectionString = ConnStr;
    
                conn.Open();
    
                DbTransaction ts = conn.BeginTransaction();
    
                DbCommand dbcmd = null;           
    
                try
    
                {
    
                    dbcmd = dbf.CreateCommand();
    
                    dbcmd.CommandText = sqlStr;
    
                    dbcmd.Connection = conn;
    
                    dbcmd.Transaction = ts;
    
                    DbDataReader dr = dbcmd.ExecuteReader();
    
                    while (dr.Read())
    
                    {
    
                        Console.WriteLine(dr[1].ToString());
    
                    }
    
                    dr.Close();
    
                    ts.Commit();
    
                }
    
                catch (Exception e)
    
                {
    
                    ts.Rollback();
    
                }
    
                finally
    
                {
    
                    conn.Close();
    
                    if (dbcmd != null)
    
                    {
    
                        dbcmd.Dispose();
    
                    }
    
                }
    
            }
    

    效果:

     

     

    3、 连接模式代码:

          

      public void getDataSetConnection()
    
            {
    
                //得到一个数据提供者,根据其传入的数据提供者对象
    
                DbProviderFactory dbf = DbProviderFactories.GetFactory(ProviderName);
    
                //创建连接
    
                DbConnection conn = dbf.CreateConnection();
    
                //连接字符串
    
                conn.ConnectionString = ConnStr;
    
                //创建DataAdapter对象
    
                DbDataAdapter da = dbf.CreateDataAdapter();
    
                //创建自动生成sql语句对象
    
                DbCommandBuilder dbCmdb = dbf.CreateCommandBuilder();
    
                using (DbCommand dbcmd = dbf.CreateCommand())
    
                {
    
                    dbcmd.CommandText = sqlStr;
    
                    dbcmd.Connection = conn;
    
                    //DbDataAdapter指定命令
    
                    da.SelectCommand = dbcmd;
    
                    //DbCommandBuilder指定dataAdpter
    
                    dbCmdb.DataAdapter = da;
    
                    DataSet ds = new DataSet();
    
                    da.Fill(ds);
    
                    // ds.Tables[0].Rows[0].Delete();
    
                    da.Update(ds);
    
                    DataTable dt = ds.Tables[0];
    
                    DataRow dr;
    
                    for (int i = 0; i < dt.Rows.Count; i++)
    
                    {
    
                        dr = dt.Rows[i];
    
                       Console.WriteLine(dr[1] + "     " + dr[2]);
    
                    }
    
     
    
                }
    
            }
    

    效果:

     

     以上是一个简单的例子,在正常情况下,就不会把连接串写成字符串,应放在config文件中,同样SQL语句也会改为存储过程,这样改起来比较方便。

      总结

        那些年学习ADO.NET,基本了解了怎样去访问数据库,对其进行操作,现在.NET又有了一些新的方法,比如说使用Linq、DbContext等;此文以回忆那些年学习的日子。

  • 相关阅读:
    newifi3-D2 openwrt挂载u盘扩容/overlay
    # mac使用homebrew安装jdk和tomcat
    React学习小记--setState的同步与异步
    [vscode直接运行js文件报错]: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
    # js权威指南之对象篇
    # 初体验之腾讯位置服务彩云天气开发者api
    自用资源合集(持续更新)
    网页嵌入播客
    网页嵌入音乐歌单
    All live
  • 原文地址:https://www.cnblogs.com/xin_ny/p/2373697.html
Copyright © 2011-2022 走看看