参数传递 – 我可以将SqlParameterCollection对象传递给SQL命令

我目前有一个连接类来处理我的所有数据库连接.我想要做的是在一个页面上构建一个SqlParameterCollection对象,然后将该对象传递给我的连接类.是否有可能做到这一点?我没有收到任何编译错误,但我无法识别参数.这是我想要做的:

Page 1: 

    string sql = null;
conn.strConn = connectionstring;

sql = "sqlstring";

SqlParameterCollection newcollect = null;
newcollect.Add("@Switch",1);

conn.OpenReader(sql, newcollect);
while (conn.DR.Read())
{
        read data onto page here...
}
conn.CloseReader();

Page 2 (connection class) :

public void OpenReader(string sql, SqlParameterCollection collect)
{
        Conn = new SqlConnection(strConn);
        Conn.Open();
        Command = new SqlCommand(sql,Conn);

        Command.Parameters.Add(collect);  <------This is the root of my question
        Command.CommandTimeout = 300;
        // executes sql and fills data reader with data
        DR = Command.ExecuteReader(); 
}

最佳答案 基本上,在ASP.NET中,要在页面之间保留某些内容,您需要使用会话状态并将您的对象放在那里 – 所以您可以尝试这样的事情:

第1页:

List<SqlParameter> newcollect = new List<SqlParameter>();
newcollect.Add(new SqlParameter("@Switch", 1));

Session["SqlParameters"] = newcollect;

第2页(连接类):

public void OpenReader(string sql)
{
    Conn = new SqlConnection(strConn);
    Conn.Open();

    Command = new SqlCommand(sql,Conn);

    List<SqlParameter> coll = null;
    if(Session["SqlParameters"] != null)
    {
       coll = (List<SqlParameter>)Session["SqlParameters"];
    }

    Command.Parameters.AddRange(coll.ToArray());
    Command.CommandTimeout = 300;
    // executes sql and fills data reader with data
    DR = Command.ExecuteReader(); 
}

这将起作用 – 如果您在ASP.NET站点上启用了会话状态.如果您的站点由于某种原因无法使用会话状态内存(例如,如果您在Webfarm上并且无法使用SQL Server进行会话状态),则此方法无效

点赞