在C#中需要多次用到数据库的操作语句,包括增、删、改、查等。每次使用的格式都差不多,只是修改一些参数。对于这些雷同的操作,大家是不是写成类或者函数形式呢?

解决方案 »

  1.   

    把所有的sql语句放到DAL数据访问层!!
    BLL层(业务逻辑层)或UI页面,实例化DAL层的类,通过方法调用!!
      

  2.   

    写一个辅助类,调用即可.
    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Collections.Generic;namespace StockManageSystemDAL
    {
        /// <summary>
        /// Copyright (C) 2004-2008  
        /// 数据访问基础类(基于SQLServer)
        /// 用户可以修改满足自己项目的需要。
        /// </summary>
        public abstract class DbHelperSQL
        {
            //数据库连接字符串(web.config来配置)
            //<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" />
            protected static string connectionString = @"Data Source=PENGXUE20090112\MYSERVER2005;Initial Catalog=StockManageSystem;User id=sa;Password=pengxue";
            public DbHelperSQL()
            {
            }        #region 公用方法        public static int GetMaxID(string FieldName, string TableName)
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = GetSingle(strsql);
                if (obj == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }
            public static bool Exists(string strSql, params SqlParameter[] cmdParms)
            {
                object obj = GetSingle(strSql, cmdParms);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            #endregion        #region  执行简单SQL语句        /// <summary>
            /// 执行SQL语句,返回影响的记录数
            /// </summary>
            /// <param name="SQLString">SQL语句</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSql(string SQLString)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            int rows = cmd.ExecuteNonQuery();
                            return rows;
                        }
                        catch (System.Data.SqlClient.SqlException E)
                        {
                            connection.Close();
                            throw new Exception(E.Message);
                        }
                    }
                }
            }        /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="SQLStringList">多条SQL语句</param>
            public static void ExecuteSqlTran(List<string> SQLStringList)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    SqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    try
                    {
                        for (int n = 0; n < SQLStringList.Count; n++)
                        {
                            string strsql = SQLStringList[n].ToString();
                            if (strsql.Trim().Length > 1)
                            {
                                cmd.CommandText = strsql;
                                cmd.ExecuteNonQuery();
                            }
                        }
                        tx.Commit();
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        tx.Rollback();
                        throw new Exception(E.Message);
                    }
                }
            }
      

  3.   

    /// <summary>
            /// 执行带一个存储过程参数的的SQL语句。
            /// </summary>
            /// <param name="SQLString">SQL语句</param>
            /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSql(string SQLString, string content)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand(SQLString, connection);
                    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
                    myParameter.Value = content;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        return rows;
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        throw new Exception(E.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            /// <summary>
            /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
            /// </summary>
            /// <param name="strSQL">SQL语句</param>
            /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
            /// <returns>影响的记录数</returns>
            public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand(strSQL, connection);
                    System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
                    myParameter.Value = fs;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        return rows;
                    }
                    catch (System.Data.SqlClient.SqlException E)
                    {
                        throw new Exception(E.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }        /// <summary>
            /// 用于多表批量数据提交,调用存储过程来实现的数据的插入
            /// </summary>
            /// <param name="dic">参数列表为SqlParameter[]; 存储过程名为 string </param>
            public static void ExecuteSqlTran(Dictionary<SqlParameter[], string> dic)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        SqlCommand cmd = new SqlCommand();
                        try
                        {
                            foreach (SqlParameter[] paras in dic.Keys)
                            {
                                string spName = dic[paras].ToString();
                                PrepareCommand(cmd, conn, trans, spName, paras);
                                cmd.CommandType = CommandType.StoredProcedure;
                                cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
    .........
      

  4.   

           1333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\\=\\zJ vbx 1
      

  5.   

    自己做个传值的类用List<>封装,用来传参数就很好啊
      

  6.   

    sqlhelper DBSQLHelper,网上总结很多。楼主看看
      

  7.   

    你先学着用一下SQLHelper吧。
    慢慢地再学着自己改成符合自己要求的吧。
      

  8.   

    2楼的GetSingle好像没有定义呀?
      

  9.   

    SQLHelper是VS2008中的吗?我的VS2005中好像没有?
      

  10.   

    我这里有最新的访问类你可以
    来看看看啊,http://www.cnblogs.com/sufei/category/228923.html
      

  11.   

    SQLHelper SqlHelper是一个微软完全开放源码的数据库操作类
    自己百度一下,很多
      

  12.   

    SQLHelper与 SqlHelper有什么区别?
    刚下了一个SqlHelper,感觉很大,似乎用不到这么多?
      

  13.   


    SQLHelper就是一个数据库操作类,一个普通的类并不是vs2008里面的他只是一个类名,你可以取别的名字啊,数据库操作类而已
      

  14.   

    如果进行基础操作常用的就几个
    connectionString是存连接字符串
    增删改用ExecteNonQuery,返回影响条数
    查用ExecuteDataSet,返回的是dataset
    别的也都不难,应该有注释,好好看看就可以了