zoukankan      html  css  js  c++  java
  • .NET基础操作回顾_使用ADO.NET操作SqlServer使用的类

        有些工具用的久了或者有新工具出现后,就慢慢的遗忘了很多,它们从熟悉的变成陌生,当然,对于我们来说不是好事吧。

              今天回顾一下ADO.NET用到的MS的基础类库,先上代码(标准的SqlServer操作)

              

    1)一个基本的插入封装方法  
            using System;
         using System.Collections;
         using System.Text;

           using System.Data

         using System.Data.SqlClient;
        
            public static bool Add(Hashtable model)
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("insert into SysUser(");
                strSql.Append("UserID,EffectiveTime)");
                strSql.Append(" values (");
                strSql.Append("@UserID@EffectiveTime)");
                SqlParameter[] parameters = {new SqlParameter("@UserID", SqlDbType.VarChar,50),new SqlParameter("@EffectiveTime", SqlDbType.VarChar,30)};
                parameters[0].Value = model["UserID"];
                parameters[1].Value = model["EffectiveTime"];
    
                return SQLHelper.ExecuteNonQuery(ConnString, strSql.ToString(), parameters) > 0;
            }

            上面方法用到了四个基础类:Hashtable用来存放传入的参数(key/value 组合);StringBuilder用来拼接字符串;因为StringBuilder会预先分配存储空间,效率比string高;SqlParameter,向SqlCommand传递参数 ;string 在这样充当最终的SQL 字符串参数(由StringBuilder转化而来)。

    2) 执行的方法
    public static int ExecuteNonQuery(string connString, string cmdText, params SqlParameter[] cmdParms) { SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connString)) { PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } }

        上面方法也用到了四个类:string(略过);SqlParameter,向SqlCommand传递参数 ;SqlCommand 类,对SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程(不能被继承);SqlConnection 类,表示到 SQL Server 数据库的打开连接(不能被继承)。

     3)查询的方法
        public static DataSet Adapter(string connString, string cmdText, params SqlParameter[] cmdParms) { SqlCommand cmd = new SqlCommand(); DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(connString)) { PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, cmdParms); SqlDataAdapter ada = new SqlDataAdapter(cmd); ada.Fill(ds); cmd.Parameters.Clear(); return ds; } }

        上面方法也用到了六个类:string(略过);SqlParameter,向SqlCommand传递参数 ;SqlCommand类,对SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程(不能被继承);SqlConnection 类,表示到 SQL Server 数据库的打开连接(不能被继承);DataSet,一个存放于内存中的数据缓存类;SqlDataAdapter,用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接,一个DataSet中至少包含一个DataTable(一个内存中的数据表类)。.

    4)事务的执行类
            public static int ExecuteNonQuery(string connString, List<string> listCmdText, List<SqlParameter[]> listCmdParms)
            {
                if (listCmdText.Count != listCmdParms.Count)
                {
                    return -1;
                }
                int val = 0;
                SqlCommand cmd = new SqlCommand();
                using (SqlConnection conn = new SqlConnection(connString))
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
                    SqlTransaction trans = conn.BeginTransaction();
                    try
                    {
                        for (int i = 0; i < listCmdText.Count; i++)
                        {
                            PrepareCommand(cmd, conn, trans, CommandType.Text, listCmdText[i], listCmdParms[i]);
                            val += cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    catch(Exception ex)
                    {
                        trans.Rollback();
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Close();
                        }
                        throw ex;
                    }
                    finally
                    {
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Close();
                        }
                    }
                }
                return val;
            }

                  上文未描述的类:SqlTransaction,在 SQL Server 数据库中生成的 Transact-SQL 事务的类(用于多条SQL执行);List,通过索引访问的对象的强类型列表。

                 小结一下:

                  1)拼接SQL字符串:会用的String、StringBuilder

                  2)通用参数传递:List、HashTable

                  3)专用类(链接其它数据库采用不同的近似类库):参数传递类,SqlParameter;数据库连接类,SqlConnection ;事务类,SqlTransaction;SqlCommand,命令执行类;SqlDataAdapter,命令执行和链接类。

  • 相关阅读:
    前后端项目结构规范性记录
    开发问题记录(这部分还是比较零碎)
    对HashMap的一次记录
    面试问题记录 三 (JavaWeb、JavaEE)
    面试问题记录 二 (数据库、Linux、Redis)
    面试问题记录 一 (基础部分)
    对正则表达式的一些记录
    WEB与游戏开发的一些区别
    MarkDown常用语法全纪录
    MySQL压测相关内容
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5256543.html
Copyright © 2011-2022 走看看