4

我目前有一个连接类来处理我所有的数据库连接。我想要做的是在一页上构建一个 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(); 
}
4

2 回答 2

4

基本上,在 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 用于会话状态),这将不起作用

于 2011-06-12T07:38:24.570 回答
-2

你可以像这样实例化一个新SqlParameterCollection的:

var P = new SqlCommand().Parameters;
于 2012-03-04T11:15:25.990 回答