对着书来学习,发现书本里面的项目的dal层全部调用一个类似于dbhelper的东西,那以后做项目都直接拷这个东西吗?固定的吗?对新手的学习很没好处,那dbhelp要自己写吗?

解决方案 »

  1.   


    MS都写了..你还要自己写....一般都够用了...LZ找个比较完善的版本吧...
      

  2.   

    问题是我是新手。。那我学的ado没用武之处···
      

  3.   

    直接用或者先用个简单的。
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Collections;namespace M_Common.SqlHelper
    {    /******************************    ******************************/
        public class SqlHelper
        {
            private static SqlConnection cn = null;
            private static SqlCommand cmd = null;        public SqlHelper()
            {        }        /// <summary>
            /// 判断连接状态
            /// </summary>
            /// <returns>返回连接状态</returns>
            private static SqlConnection GetConn()
            {
                string ConnStr = M_Common.Helper.ConfigHelper.GetconnMsSql.ToString();
                cn = new SqlConnection(ConnStr);
                if (cn.State != ConnectionState.Open)
                {
                    cn.Open();
                }
                return cn;
            }
            /// <summary>
            /// 获取某表的某个字段的最大值
            /// </summary>
            /// <param name="FieldName">字段名</param>
            /// <param name="TableName">表明</param>
            /// <returns>返回最大值</returns>
            public static int GetMaxID(string FieldName, string TableName)
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = SqlHelper.GetSingle(strsql);
                if (obj == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }
            /// <summary>
            /// 执行一条计算查询结果语句,返回查询结果(object)。
            /// </summary>
            /// <param name="SQLString">计算查询结果语句</param>
            /// <returns>查询结果(object)</returns>
            public static object GetSingle(string SQLString)
            {
                using (SqlCommand cmd = new SqlCommand(SQLString, GetConn()))
                {
                    try
                    {
                        object obj = cmd.ExecuteScalar();
                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                        {
                            return null;
                        }
                        else
                        {
                            return obj;
                        }
                    }
                    catch (System.Data.SqlClient.SqlException e)
                    {
                        throw e;
                    }
                }        }        /// <summary>
            /// 带参数返回一行一列ExecuteScalar
            /// </summary>
            /// <param name="cmdtext">存储过程或者SQL语句</param>
            /// <param name="para">参数数组</param>
            /// <param name="ct">命令类型</param>
            /// <returns>返回一行一列value</returns>
            public static int ExecuteScalar(string cmdtext, SqlParameter[] para, CommandType ct)
            {
                int value;
                try
                {
                    cmd = new SqlCommand(cmdtext, GetConn());
                    cmd.CommandType = ct;
                    cmd.Parameters.AddRange(para);
                    value = Convert.ToInt32(cmd.ExecuteScalar());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (cn.State == ConnectionState.Open)
                    {
                        cn.Close();
                    }
                }
                return value;
            }
            /// <summary>
            /// 执行无参的操作
            /// </summary>
            /// <param name="cmdtext">SQL语句或存储过程</param>
            /// <param name="ct">CMD的类型</param>
            /// <returns>处理后的值</returns>
            public static int ExecuteNonQuery(string cmdtext, CommandType ct)
            {
                int value;
                try
                {
                    cmd = new SqlCommand(cmdtext, GetConn());
                    cmd.CommandType = ct;
                    value = cmd.ExecuteNonQuery() > 0 ? 1 : 0;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (cn.State == ConnectionState.Open)
                    {
                        cn.Close();
                    }
                }
                return value;
            }        /// <summary>
            /// 执行带参的增.删.改操作
            /// </summary>
            /// <param name="cmdtext">SQL语句或存储过程</param>
            /// <param name="para">参数数组</param>
            /// <param name="ct">CMD类型</param>
            /// <returns>处理后的值</returns>
            public static int ExecuteNonQuery(string cmdtext, SqlParameter[] para, CommandType ct)
            {
                int value;
                using (cmd = new SqlCommand(cmdtext, GetConn()))
                {
                    cmd.CommandType = ct;
                    cmd.Parameters.AddRange(para);
                    value = cmd.ExecuteNonQuery() > 0 ? 1 : 0;
                }
                return value;
            }        /// <summary>
            /// 执行无参的查询 返回DataTable
            /// </summary>
            /// <param name="cmdtext">存储过程名称或SQL语句</param>
            /// <param name="ct">命令类型</param>
            /// <returns>返回DataTable</returns>
            public static DataTable ReturnDataTable(string cmdtext, CommandType ct)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdtext, GetConn());
                //类型
                cmd.CommandType = ct;
                SqlDataReader dr = null;
                //连接池 读完自动释放Connection
                using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    //用委托填充DataTable
                    dt.Load(dr);
                }
                return dt;
            }        /// <summary>
            /// 执行有参的查询 返回DataTable
            /// </summary>
            /// <param name="cmdtext">存储过程名称或SQL语句</param>
            /// <param name="ct">命令类型</param>
            /// <param name="para">参数数组</param>
            /// <returns>返回DataTable</returns>
            public static DataTable ReturnDataTable(string cmdtext, CommandType ct, SqlParameter[] para)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdtext, GetConn());
                //类型
                cmd.CommandType = ct;
                //参数数组
                cmd.Parameters.AddRange(para);
                SqlDataReader dr = null;
                //连接池 读完自动释放Connection
                using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    //用委托填充DataTable
                    dt.Load(dr);
                }
                return dt;
            }        /// <summary>
            /// 执行无参的查询 返回DataSet
            /// </summary>
            /// <param name="cmdtext">存储过程名称或SQL语句</param>
            /// <param name="ct">命令类型</param>
            /// <returns>返回DataSet</returns>
            public static DataSet ReturnDataSet(string cmdtext, CommandType ct)
            {
                cmd = new SqlCommand(cmdtext, GetConn());
                //类型
                cmd.CommandType = ct;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                try
                {
                    da.Fill(ds);
                }
                catch (Exception err)
                {                throw err;
                }
                finally
                {
                    if (cn.State != ConnectionState.Closed)
                    {
                        cn.Close();
                    }
                }
                return ds;
            }
            /// <summary>
            /// 执行有参的查询 返回DataSet
            /// </summary>
            /// <param name="cmdtext">存储过程名称或SQL语句</param>
            /// <param name="ct">命令类型</param>
            /// <param name="para">参数数组</param>
            /// <returns>返回DataSet</returns>
            public static DataSet ReturnDataSet(string cmdtext, CommandType ct, SqlParameter[] para)
            {
                cmd = new SqlCommand(cmdtext, GetConn());
                //类型
                cmd.CommandType = ct;
                //参数数组
                cmd.Parameters.AddRange(para);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                try
                {
                    da.Fill(ds);
                }
                catch (Exception err)
                {                throw err;
                }
                finally
                {
                    if (cn.State != ConnectionState.Closed)
                    {
                        cn.Close();
                    }
                }
                return ds;
            }    }
    }
      

  4.   

    你用多了,自然而然的就理解了。当初我也是直接找个比较完善的Dbhelp来抄袭,用的多了,就算不去刻意思考,也明白原来这么用是这么回事啊,
      

  5.   

    怎么可能是固定的,就算是 dal, bll 什么的也不是"固定"的...
    不需要学怎么写dbhelper,学好怎么用ado.net就好了..
      

  6.   

    DBHelper 就是一个对数据进行操作的类文件。你现在刚开始,应该是所有的DAL层的对数据库的操作都会调用它,多用几次,知道每个方法是干什么的就行了,不用刻意的死记硬背,
    比如你先要执行一个数据库查询的操作,肯定得调用DBHelper里面的创建连接的方法,然后在调用查询的方法,最后在关闭。只要你明白这个流程就行了。
    还有,如果你还是学生,我不知道现在考试是怎么考法了,我们上学时,老师还专门考过这个DBHelper,用记事本写。呵呵
      

  7.   

    嗯 对这个问题大概有点了解 之前发了个帖。。貌似被删掉了 在这个贴在问问吧:迷惘了。感觉学习遇上了瓶颈。怎么继续下去?
    我都是根据书本每个知识点知识点学,我的计划是,学完所以知识点,然后通过书本后面的各种项目来训练熟练程度,争取在9月份开学能到达可以找工作的程度,现在处于找项目来巩固知识点阶段。但是我发现。书本的项目中的ado用的是他们集成的dbhelper,而且很少的地方用到知识点,例如多态,委托,事件之类的知识点达不到我想巩固的目的,想问下接来下应该怎样?我还不太懂什么时候用什么例如什么时候用多态 什么时候用泛集,我的目的就是想通过项目来巩固这些知识点。让我自己感悟什么时候用什么的,不过现在的例子貌似达不到我的目的。迷惘,请问该怎样?按照书本的继续写代码吗?就我个人来说,我觉得我学习一定要多练我才懂。多敲代码。啊啊啊好怕9月份大四开学了怕找不到工作。。 
      

  8.   

    我毕业的时候还没楼主会的多,.net还是工作以后才自学的