补充数据层处理参数~~

public ExecState Exec(DAL.SqlClient.SqlParametersAll.SqlText commandText object[] ParameterValue)
{
      //---装参数
            if (ParameterValue != null)
            {
 sqlCommand.Parameters.AddRange(LiuJia.DAL.SqlClient.SqlParametersAll.GetSqlParameter(commandText, ParameterValue));
               
            }

 --------------------在昨天的程序中加入这么一句处理参数~~

}

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// SqlParametersAll 的摘要说明
/// </summary>
/// 


namespace LiuJia.DAL.SqlClient
{
    
/// <summary>
    
/// 程序中用到的所有参数道集合
    
/// </summary>

     public static class SqlParametersAll
    
{
         
/// <summary>
         
/// 缓冲对象
         
/// </summary>

        private static System.Collections.Generic.Dictionary<string, System.Data.SqlClient.SqlParameter[]> Currnet = new System.Collections.Generic.Dictionary<string, System.Data.SqlClient.SqlParameter[]>();

         
static SqlParametersAll()
         
{
             
//初始化文章的参数
             InstanceArticlesSelect();

             
//--初始化插入文章的参数
             InstanceArticle_Insert();
         }

//         @Choose  int,---选择操作-0-全部,1察看指定类别的,2,察看指定UserId,3是检索指定标题的
//@Id int,--根据逻辑不同而代表不同的含义-1察看指定类别的,2,察看指定UserId,
//@SearchText varchar(max),--在3的情况下有座用-代表指定标题
//@MaxDate datetime,--4用的参数大于某个日期
//@MinDate dateTime --4用的参数小于某个日期


         
/// <summary>
         
/// 初始化检索文章的字参数
         
/// </summary>

         private  static void InstanceArticlesSelect()
         

             System.Data.SqlClient.SqlParameter[] ArticlesParameter
=new System.Data.SqlClient.SqlParameter[5];
             ArticlesParameter[
0= new System.Data.SqlClient.SqlParameter("@Choose", SqlDbType.Int);
             ArticlesParameter[
1= new System.Data.SqlClient.SqlParameter("@Id", SqlDbType.Int);
             ArticlesParameter[
2= new System.Data.SqlClient.SqlParameter("@SearchText", SqlDbType.VarChar,300);
             ArticlesParameter[
3= new System.Data.SqlClient.SqlParameter("@MaxDate", SqlDbType.DateTime);
             ArticlesParameter[
4= new System.Data.SqlClient.SqlParameter("@MinDate", SqlDbType.DateTime);
             SqlParametersAll.Currnet.Add(
"Article_Select_all", ArticlesParameter);
         }


         
/// <summary>
         
/// 初始化插入,或者更新的存储过程-当插入的标题存在,并且插入的作者是原来的作者则可以更改
         
/// </summary>

         private static void InstanceArticle_Insert()
         

         
//         alter PRocedure Article_Insert
//@Title varchar(max),
//@CategoryId int ,
//@UserId int,
//@ContentMy varchar(max),
//@IsTrue varchar(max) output



             System.Data.SqlClient.SqlParameter[] ArticlesParameter
=new System.Data.SqlClient.SqlParameter[5];
             ArticlesParameter[
0= new System.Data.SqlClient.SqlParameter("@Title", SqlDbType.VarChar, 300);
             ArticlesParameter[
1= new System.Data.SqlClient.SqlParameter("@CategoryId", SqlDbType.Int);
             ArticlesParameter[
2= new System.Data.SqlClient.SqlParameter("@UserId", SqlDbType.Int);
             ArticlesParameter[
3= new System.Data.SqlClient.SqlParameter("@ContentMy", SqlDbType.VarChar,3000);
             ArticlesParameter[
4= new System.Data.SqlClient.SqlParameter("@IsTrue ", SqlDbType.VarChar,100);
             ArticlesParameter[
4].Direction = ParameterDirection.Output;
             SqlParametersAll.Currnet.Add(
"Article_Insert", ArticlesParameter);
         }


         
/// <summary>
         
/// 
         
/// </summary>
         
/// <param name="whatText">SqlText是枚举,用枚举为了提高准确性哈哈哈~~I like</param>
         
/// <param name="ParameterValue">给得到的参数数组复加数值</param>
         
/// <returns></returns>

         public static System.Data.SqlClient.SqlParameter[] GetSqlParameter(SqlText whatText,object[] ParameterValue)
        
{
             
//将枚举转化为相应的字符串咯
             string tempText= Enum.GetName(typeof(SqlText),whatText);
             
//--察看有没有指定的Key不存在就实例华
            if (!SqlParametersAll.Currnet.ContainsKey(tempText))
            
{
                
//看看用户需要的那种参数不存在初始化他
                switch (whatText)
                
{
                    
case SqlText.Article_Select_all://初始化检索文章的参数集合
                        SqlParametersAll.InstanceArticlesSelect();
                        
break;
                    
case SqlText.Article_Insert:
                        SqlParametersAll.InstanceArticle_Insert();
                        
break;
                    
default:
                        
break;
                }

            }

            
//-----------------浅层拷贝
            return SqlParametersAll.CloneParameters(SqlParametersAll.Currnet[tempText], ParameterValue);

        }


         
/// <summary>
         
/// 浅层拷贝,和给参数符值一起做了   ——~~艾懒的分开~~效率第一阿
         
/// </summary>
        
/// <param name="originalParameters">要拷贝的对象</param>
        
/// <param name="ParameterValue">要给参数复加的 ----值</param>
         
/// <returns></returns>

         private static System.Data.SqlClient.SqlParameter[] CloneParameters(System.Data.SqlClient.SqlParameter[] originalParameters, object[] ParameterValue)
         
{
             
//originalParameters.Length==ParameterValue.Length,所以可以采用考贝后---------复制数据的方式
             
//至于2者的长度不必担心,因为ParameterValue在数入的时候严格检测,同时originalParameters也是严格检测咯

             System.Data.SqlClient.SqlParameter[] clonedParameters 
= new System.Data.SqlClient.SqlParameter[originalParameters.Length];

             
for (int i = 0, j = originalParameters.Length; i < j; i++)
             
{
                 
//----复制构造函数,以便使用当前实例的值初始化Parameter 类的新实例。
                 clonedParameters[i] = (System.Data.SqlClient.SqlParameter)((ICloneable)originalParameters[i]).Clone();
                 
//--------------------------给新的实例复加数据
                 clonedParameters[i].Value = ParameterValue[i];
             }


             
return clonedParameters;
            
         }











         
//------------------------要添加新的存储过程,存储过程如果有参数请你该这里,添加存储过程的名字在下面,以及添加一个初始化的方法
         /// <summary>
         
/// 用来检索参数的名称
         
/// </summary>

         public enum SqlText
         
{
             
/// <summary>
             
/// 查询文章用的参数检索的Key
             
/// </summary>

             Article_Select_all,

             
/// <summary>
             
/// 插入或者更新文章
             
/// </summary>

             Article_Insert
         }

    }

}


posted @ 2007-04-25 23:17  苹果王子  阅读(1251)  评论(0编辑  收藏  举报