问题如下:
RoseLs.RoseLs.SQLServerDAL下的一个文件userAdmin.cs代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using RoseLs.DBUtility;
using RoseLs.IDAL;
using RoseLs.Model;namespace RoseLs.SQLServerDAL
{
    public class UserAdmin
    {        private const string SQL_CHECKADMIN = "select UserAdmin.idx,UserAdmin.Adusername,UserAdmin.Adpassword,UserAdmin.AdTitle,UserAdmin.AdJurisdiction from UserAdmin where Adusername=@username and Adpassword=@password";
        private const string username = "@username";
        private const string userpassword = "@password";

        public UserAdminInfo GetUserAdmin(string UserName, string UserPassWord)
        {
            UserAdminInfo userAdmin = null;
            SqlParameter[] adminParms = GetAdminParameter();
            SqlCommand cmd = new SqlCommand();
            adminParms[0].Value = UserName;
            adminParms[1].Value = UserPassWord;
            foreach (SqlParameter parm in adminParms) 
                 cmd.Parameters.Add(parm);               
            using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_CHECKADMIN, adminParms))
            {
                if (rdr.Read())                    userAdmin = new UserAdminInfo(rdr.GetInt64(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4));
                else
                    userAdmin = new UserAdminInfo();
            }
            return userAdmin;
            cmd.Parameters.Clear();
        }
        
        private static SqlParameter[] GetAdminParameter()
        {
            SqlParameter[] parms = SqlHelper.GetCachedParameters(SQL_CHECKADMIN);            if (parms == null)
            {
                parms = new SqlParameter[]
                {
                    new SqlParameter(username,SqlDbType.NVarChar,20),
                    new SqlParameter(userpassword,SqlDbType.NVarChar,32)                };
                SqlHelper.CacheParameters(SQL_CHECKADMIN, parms);            }            return parms;        }
        

    }
}网站层调用页面 :Default.aspx 程序如下
     protected void  Button1_Click(object sender, EventArgs e)
     { 
       UserAdmin usa = new UserAdmin();
       UserAdminInfo ush = usa.GetUserAdmin("sibiyellow","111111");
       this.Label1.Text = ush.AdTitle;
    
     }运行的时候就报错误 :错误提示如下
    错误页面 :SQLHelper.cs
       另一个 SqlParameterCollection 中已包含 SqlParameter。
我开始的时候用的是PetShop的一个参数的传值是正确的,下楼我贴出一个参数的useradmin.cs代码
希望知道的给我解答下。

解决方案 »

  1.   

    一个参数的时候 useradmin.cs代码:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using RoseLs.DBUtility;
    using RoseLs.IDAL;
    using RoseLs.Model;namespace RoseLs.SQLServerDAL
    {
        public class UserAdmin
        {
            public UserAdminInfo GetUserAdmin(string UserName)
            {
                string SQL_CHECKADMIN = "select UserAdmin.idx,UserAdmin.Adusername,UserAdmin.Adpassword,UserAdmin.AdTitle,UserAdmin.AdJurisdiction from UserAdmin where Adusername=@username";
                string Username = "@username";
                UserAdminInfo userAdmin = null;
                SqlParameter parm = new SqlParameter(Username, SqlDbType.NVarChar, 20);
                parm.Value = UserName;
                using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_CHECKADMIN, parm))
                {
                    if (rdr.Read())                    userAdmin = new UserAdminInfo(rdr.GetInt64(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4));
                    else
                        userAdmin = new UserAdminInfo();
                }
                return userAdmin;
            }   }
    }为什么 我用petshop里面多个参数的方法咋就报错呢?
    求高手解答!
      

  2.   

    没遇到过,看一下这个,好像是浅表复制引起的问题。
    http://www.cnblogs.com/netguid/archive/2007/04/11/709169.html
      

  3.   

    不用全局SqlParameter
    局部的SqlParameter
    参数是否一致
      

  4.   

    SqlParameter[] parms = SqlHelper.GetCachedParameters(SQL_CHECKADMIN);
    GetCachedParameters()你看看这个方法获得了数据了吗?
    看看你自己的逻辑:UserAdminInfo ush = usa.GetUserAdmin("sibiyellow","111111");
    SqlHelper.GetCachedParameters(SQL_CHECKADMIN);没有设置 SqlParameter参数 也不太明白GetCachedParameters()到底要得到什么,如果是数据的话 那下面的那个判断是干什么的?还有你返回的是SqlParameter对象 都不知道你的逻辑了!!阿门...
      

  5.   


    private const string SQL_CHECKADMIN = "select UserAdmin.idx,UserAdmin.Adusername,UserAdmin.Adpassword,UserAdmin.AdTitle,UserAdmin.AdJurisdiction from UserAdmin where Adusername=@username and Adpassword=@password";
    private const string username = "@username";
    private const string userpassword = "@password";private static SqlParameter[] GetAdminParameter()SqlParameter[] adminParms = GetAdminParameter();
    SqlCommand cmd = new SqlCommand();
    adminParms[0].Value = UserName;
    adminParms[1].Value = UserPassWord;
    foreach (SqlParameter parm in adminParms)  
    cmd.Parameters.Add(parm);这些操作只是采用了参数缓存机制而已,逻辑乱在哪?
    这逻辑乱我感觉没出错啊,我是照搬petshop里面的设计的我只是没有petshop里面的麻烦 我在网站层直接调用我在useradmin里面写的方法GetUserAdmin()得到符合我要求的数据而已。   
      

  6.   

    还有没有人研究过petshop 研究过的 帮偶看看撒 头痛
      

  7.   

      foreach (SqlParameter parm in adminParms) 
      cmd.Parameters.Add(parm); 
    把这个去掉试试