zoukankan      html  css  js  c++  java
  • C# ADO.NET的五个常用对象及数据库连接操作


    C#中和数据库连接的操作时开发中必不可少的,而ADO.NET就是其中的关键技术之一。常见的ADO.NET有五个常用的对象:

    SqlConnection 数据库连接对象
    SqlCommand 数据库命令对象
    SqlDataAdapter 数据适配器
    SqlDataReader 数据库读取器,“只读、向前”,不能后退地读取数据
    DataSet  数据集,相当于内存中的数据库

    以下为这几个对象常用的方法:

    ExecuteScalar():只能读一条记录,一般用来判断数据库是否有数据等,只能读不能写。(MSDN解释:执行查询,并返回查询所返回结果集中的第一行

                                   第一列,忽略其他行其他列)ExecuteScalar():这种CMD相当于我们在ADO中用SQL语句中使用一些计算函数的功能一样,在这里我

                                  们只是返回所有影响的行数的第一行第一列数据,这样也就是相当于专业为我们的如:select count(*) from database的功能一样,我们

                                  可以用                                           

                                                   string sql="select * from  database"

                                                  SqlCommand cmd=SqlCommand(sql,conn)

                                                  int i=(int)cmd.ExecuteScalar()

                                 这样我们的局部变更i的值就是与上面我的功能一样.

    ExecuteReader:可以读一个表的记录,只能读不能写。我们通常在asp中用Recordset对象来从数据库中读出数据,并且用循环语句来一个一个的读出数据,

                                 但在我们的ADO.NET中,我们就是用DataReader 对象的ExecuteReader()方法来进行数据的列出,并且我们用这个ExecuteReader()方法

                                来显示数据是最快的一种方法,因为当我们在用ExecuteReader()方法中的DataReader 对象来进行数据的在网站建设中显示时,他只可以

                                一条一条向前读,不能返回,也就是像ASP中的ADO方法中的Recordset 对象的Movenext一样,他没有move -1这样的返回方法。

                               ExecuteReader 返回一个DataReader, DataReader 是一个只进游标, 用于读取表中的数据, 读取时,必须 要和数据库保持连接。

    ExecuteNonQuery:可以写以可以读。这个东东可以让我们在更新数据库时不使用 DataSet 而使用 ExecuteNonQuery 更改数据库中的数据。通过执行

                                      UPDATE、INSERT 或 DELETE SQL语句就可以达到更改数据库中的数据目的。即使 ExecuteNonQuery 不返回任何行,映射到参数的

                                      输出参数或返回值仍然使用数据填充。但对于 UPDATE、INSERT 和 DELETE SQL语句,返回的值就是受ExecuteNonQuery()命令影响

                                     的行数。对其它类型的语句以及回退来说,返回的值都是 -1。ExecuteNonQuery 用于执行 Delete, Update, Insert, 语句,  返回影响行数。

    以下是网上借用的一个数据库操作类DBHelper.cs示例:(代码仅供学习交流之用,备忘)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
    
    namespace HotelManagerDAL
    {
        public class DBHelper
        {
            //声明连接对象
            static SqlConnection conn;
    
    
            /// <summary>
            /// 连接属性
            /// </summary>
            public static SqlConnection Conn
            {
                get 
                {
                    if (conn == null)
                    {
                        conn = new SqlConnection("server=.;database=HotelManagerDB;uid=sa;pwd=**");
                        conn.Open();
                        return conn;
                    }
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                        return conn;
                    }
                    if (conn.State == ConnectionState.Broken)
                    {
                        conn.Close();
                        conn.Open();
                        return conn;
                    }
                    return DBHelper.conn; 
                
                }
            }
    
    
            #region 增删改共同工具方法,硬绑定
            /// <summary>
            /// 增删改共同工具方法
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static int ExecuteNonQuery(string sqlStr)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                return cmd.ExecuteNonQuery();
            } 
            #endregion
            #region 增删改共同工具方法,软绑定
            /// <summary>
            /// 增删改共同工具方法
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>                                                                                              
            public static int ExecuteNonQuery(string sqlStr,params SqlParameter[] para)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                cmd.Parameters.AddRange(para);
                return cmd.ExecuteNonQuery();
            }
            #endregion
    
    
    
            #region 得到整体信息,硬绑定
            /// <summary>
            /// 得到整体信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static object ExecuteScalar(string sqlStr)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                return cmd.ExecuteScalar();
            } 
            #endregion
            #region 得到整体信息,软绑定
            /// <summary>
            /// 得到整体信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static object ExecuteScalar(string sqlStr,params SqlParameter[] para)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                cmd.Parameters.AddRange(para);
                return cmd.ExecuteScalar();
            }
            #endregion
    
    
            #region 得到所有信息,直连式查询,硬绑定
            /// <summary>
            /// 得到所有信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static SqlDataReader ExecuteReader(string sqlStr)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                return cmd.ExecuteReader();
            }
            #endregion
            #region 得到所有信息,直连式查询,软绑定
            /// <summary>
            /// 得到所有信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static SqlDataReader ExecuteReader(string sqlStr, params SqlParameter[] para)
            {
                SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);
                cmd.Parameters.AddRange(para);
                return cmd.ExecuteReader();
            }
            #endregion
    
    
            #region 得到所有信息,断开式查询,硬绑定
            /// <summary>
            /// 得到所有信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static DataSet ExecuteReaderDataSet(string sql)
            {
                SqlDataAdapter sda = new SqlDataAdapter(sql, DBHelper.Conn);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                return ds;
            }
            #endregion
            #region 得到所有信息,断开式查询,软绑定
            /// <summary>
            /// 得到所有信息
            /// </summary>
            /// <param name="sqlStr"></param>
            /// <returns></returns>
            public static DataSet ExecuteReaderDataSet(string sqlStr, params SqlParameter[] para)
            {
                SqlDataAdapter sda = new SqlDataAdapter();
                SqlCommand cmd = new SqlCommand(sqlStr,DBHelper.Conn);
                cmd.Parameters.AddRange(para);
                sda.SelectCommand = cmd;
                DataSet ds = new DataSet();
                sda.Fill(ds);
                return ds;
            }
            #endregion
    
    
        }
    }
    

     另外附上SqlParameter的用法:http://www.23sj.net/show_article.aspx?aid=AL20120423001   这位博主已经写得很详细了,备忘学习:

    一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语句来进行注入攻击。最方便的使用SqlParameter的方法如下:

    SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") };  
    cmd.Parameters.AddRange(paras);  

    以上文字来源为自己学习所得,集中进行整理学习之用,希望对你我学习都有帮助。

  • 相关阅读:
    Java中的生产消费者问题
    线程ThreadDemo04
    Web开发的分层结构与MVC模式
    正则表达式
    jQuery总结
    深入学习Ajax
    JSTL标签库
    EL表达式
    JSP基础
    Servlet 总结
  • 原文地址:https://www.cnblogs.com/zorrobubble/p/3596916.html
Copyright © 2011-2022 走看看