我是新手 刚学习Asp。Net没多久这个是我自己写的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace SQLHelper
{
   public  class SQLHelper
    {
       private static string ConnStr = ConfigurationManager.ConnectionStrings[""].ToString();
       /// <summary>
       /// 返回SqlDataReader
       /// </summary>
       /// <param name="sql"></param>
       /// <returns></returns>
       public static SqlDataReader QueryReader(string sql) {
           SqlConnection conn = new SqlConnection(ConnStr);
           conn.Open();
           SqlCommand command = new SqlCommand(sql,conn);
           return command.ExecuteReader(CommandBehavior.CloseConnection);    
       }
       /// <summary>
       /// 返回DataSet
       /// </summary>
       /// <param name="sql"></param>
       /// <returns></returns>
       public static DataSet QueryDataSet(string sql) {
           SqlConnection conn = new SqlConnection(ConnStr);
           SqlDataAdapter dapter = new SqlDataAdapter(sql,conn);
           DataSet dataSet = new DataSet();
           dapter.Fill(dataSet);
           conn.Close();
           return dataSet;
       }
       /// <summary>
       /// 返回单行记录object
       /// </summary>
       /// <param name="sql"></param>
       /// <returns></returns>
       public static object QueryScalar(string sql) {
           object ject = null;
           using (SqlConnection conn = new SqlConnection(ConnStr))
           {
               conn.Open();
               SqlCommand command = new SqlCommand(sql, conn);
               ject = command.ExecuteScalar();
               conn.Close();
           } 
         
          return ject;          
       }
       /// <summary>
       /// 增,删,改 返回bool
       /// </summary>
       /// <param name="sql"></param>
       /// <returns></returns>
       public static bool NonQuery(string sql) {
           SqlConnection conn = null;
           SqlCommand command = null;
           SqlTransaction tion = null;
           int iRet = 0;
           try
           {
               conn = new SqlConnection(ConnStr);
               command = new SqlCommand(sql, conn);
               conn.Open();
               tion = conn.BeginTransaction();
               command.Connection = conn;
               command.Transaction = tion;
               command.CommandText = sql;     
               iRet = command.ExecuteNonQuery();
               tion.Commit();
               return iRet == 0 ? false : true;
           }
           catch (Exception)
           {               tion.Rollback();
           }
           finally {
               if (conn.State==ConnectionState.Open)
               {
                   conn.Close();
               }
           }
           return iRet == 0 ? false : true;       
       }我在网上查过 一些老手 写的更简洁 但是很多地方不大懂 还有我想把存储过程也封装起来 
  /// <summary>
       /// 存储过程--查询
       /// </summary>
       /// <param name="name">存储过程名</param>
       /// <param name="para">入参</param>
       /// <param name="OutPara">出参</param>
       /// <param name="DbType">参数类型</param>
       /// <param name="Size">参数大小</param>
       /// <returns>返回SqlDataReader</returns>
       public static SqlDataReader ReaderStorage(string name,SqlParameter[] para,SqlParameter[] OutPara,SqlDbType DbType,int Size) {}
这是我想到的 但是在传参的时候 参数类型 大小 都是无法确定的 请高手指点 希望能详细指点下 谢谢

解决方案 »

  1.   

    一般可以分为以下几步
    1.  定义Model: 可以利用一些自定义特性将表结构定义好
    2.  SQL语句拼接类: 利用反射及泛型解析Model类,自动生成对应SQL
    3.  执行类 : 用于执行SQL语句并返回对应数据类型(如object,string,datatable等) 封装存储过程参数可以利用数据进行传递。
    概要的说一下,希望可以帮到你你所贴出来的代码应该只是基本实现了第三步
      

  2.   

    我给你吧:这是sql语句的
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    namespace QS.DB
    {
        public class DB
        {
            public DB()
            {
            }        //connStr为访问SQL Server2000的连接字符串
            //说明:
            //server=59.74.99.239
            //59.74.99.239为数据库服务器IP地址
            //在使用时,替换为使用的数据库服务器的IP地址
            //database=xx8
            //xx8在这里表示库名,
            //在使用时,替换为使用的数据库的库名
            //uid=sa
            //password=sa        // 下面是从webconfig获取数据库的联接字符串的方法
            // string connStr = System.Configuration.ConfigurationSettings.AppSettings["sqlLink"];
            // 下面是在webconfig里如何设置数据库的联接字符串的方法,和上面的一起配套使用
            // <configuration>
            // <appSettings>
            // <add key="sqlLink" value="server=59.74.111.119;database=xx9;uid=sa;password=sa"/>
            // </appSettings>        //下面是临时调试使用的方法,直接设置联接字符串。
            string connStr = "server=.;database=QSdatabase;uid=sa;password=sa";
            //上面是临时调试使用的方法,直接设置联接字符串。
            #region 获取查询结果,DataSet GetSqlDataSet(string sqlString)
            /// <summary>
            /// 获取查询结果。返回类型为DataSet
            /// sqlString 参数为查询的SQL语句
            /// </summary>
            public DataSet GetSqlDataSet(string sqlString)
            {
                //定义返回变量
                //实例化数据集DataSet,对象名为ds
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                try
                {
                    //实例化连接对象SqlConnection,对象名为sqlConn
                    SqlConnection sqlConn = new SqlConnection(connStr);                //用查询的SQL(sqlString)语句和连接对象sqlConn实例化数据接口SqlDataAdapter
                    //对象名为da
                    SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);                //da.Fill(ds)是数据接口(SqlDataAdapter)提供的方法
                    //具体作用为:
                    //打开与数据库的连接
                    //将查询的SQL语句发送到数据库服务器
                    //接受返回的查询结果
                    //并将结果填充到数据集对象ds中
                    //关闭与数据库的连接
                    da.Fill(ds);
                    dt = ds.Tables[0];            }
                catch (Exception e)
                {
                    //抛出捕捉到的异常
                    throw (e);
                }
                //返回查询到的结果
                return ds;
            }
            #endregion        #region 执行增、删或改的SQL语句 int ExecuteSql(string sqlString)
            /// <summary>
            /// 执行增、删或改的SQL语句
            /// 返回值为受影响的行数(记录数)
            /// sqlString 参数为增、删或改的SQL语句
            /// </summary>
            public int ExecuteSql(string sqlString)
            {
                int i = 0;
                try
                {
                    ////实例化连接对象SqlConnection,对象名为sqlConn
                    SqlConnection sqlConn = new SqlConnection(connStr);                //用查询的SQL(sqlString)语句和连接对象sqlConn实例化SqlCommand
                    //对象名为sqlCmd
                    SqlCommand sqlCmd = new SqlCommand(sqlString, sqlConn);                //打开与数据库的连接
                    sqlConn.Open();                //将增、删或改的SQL语句发送到数据库服务器
                    //并接受返回的结果,返回的结果为受影响的行数(记录数)
                    i = sqlCmd.ExecuteNonQuery();                //关闭与数据库的连接
                    sqlConn.Close();
                }
                catch (Exception e)
                {
                    Exception ee = new Exception(sqlString + e.Message);
                    throw (ee);
                }
                return i;
            }
            #endregion    }
    }