我目前有一个连接类来处理我的所有数据库连接.我想要做的是在一个页面上构建一个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进行会话状态),则此方法无效