按书中教材写了一个访问数据库的方法:
        //执行带参数的存储过程
        public static DataSet SelectProc(string strProcName, string[] sqlParamsName, SqlDbType[] sqlParamsType, int[] sqlParamsSize, string[] sqlParamsValue)
        {
            SqlConnection sqlcon = new SqlConnection(strConnection);
            SqlCommand sqlcmd = new SqlCommand();
            DataSet dsTemp = new DataSet();
            SqlDataAdapter sqlad = new SqlDataAdapter();
            int intCounter;
            sqlcon.Open();
            sqlcmd.Connection = sqlcon;
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.CommandText = strProcName;
            for (intCounter = 0; intCounter < sqlParamsName.Length; intCounter++)
            {
                sqlcmd.Parameters.Add(sqlParamsName[intCounter],sqlParamsType[intCounter],sqlParamsSize[intCounter]).Value=sqlParamsValue[intCounter];
            }
            sqlad.SelectCommand = sqlcmd;
            sqlad.Fill(dsTemp);
            sqlad.Dispose();
            sqlcmd.Dispose();
            sqlcon.Close();
            sqlcon.Dispose();
            return dsTemp;
        }调用的时候使用以下代码:
            string[] procParamsName = { "@username" };
            SqlDbType[] procParamsType =  { SqlDbType.VarChar };
            int[] procParamsSize = { 12 };
            string[] procParamsValue = { "Kennethc" };            GridView1.DataSource = dbcon.SelectProc("selectabc",procParamsName,procParamsType,procParamsSize,procParamsValue);
            GridView1.DataBind();也就是说每次调用的时候都必须定义四个数组,感觉比较麻烦,也不直观,想能将这四个数组定义为一个类或结构什么的,这样定义起来比较简单。
比如定义的时候可以采用类似以下的方法:
ProcParamers newproc = new ProcParamers();
newproc.addParamers("@username",SqlDbType.VarChar,12,"Kennethc");
GridView1.DataSource = dbcon.SelectProc("selectabc",newproc);
GridView1.DataBind();请问如何实现比较好?怎样定义这个类(或结构?)?

解决方案 »

  1.   

    事实上,.net 已经提供类 
    DbParameterCollection 
    SqlParameterCollection
    OleDbParameterCollection  
    ...但他们的构造器,不是 public,也就是我们无法实例化,由相应的 xxxCommand 创建之,你可以用 Reflector 反射 System.Data.dll 查看其源码,理解其实现
      

  2.   

    可以定义如下的数据类型:public struct ParaInfo
    {
        public string parName;
        public SqlDbType parType;
        public int parSize;
        public object parValue;
    }然后使用 ParaInfo[];
    或使用List<ParaInfo>
      

  3.   

    谢谢楼上,问题解决。不知道这种方法是否比较合理的方法!?
    先定义一个结构:    public struct SqlParamsInfo
        {
            public string ParamsName;
            public SqlDbType ParamsType;
            public int ParamsSize;
            public object ParamsValue;        public SqlParamsInfo(string pName, SqlDbType pType, int pSize, object pValue)
            {
                ParamsName = pName;
                ParamsType = pType;
                ParamsSize = pSize;
                ParamsValue = pValue;
            }
        }
    定义参数:
                SqlParamsInfo[] sqlParams = new SqlParamsInfo[1];
                sqlParams[0] = new SqlParamsInfo("@username", SqlDbType.VarChar, 12, "Kennethc");
                GridView1.DataSource = dbcon.SelectProc("selectabc", sqlParams);
                GridView1.DataBind();