4

現在、すべてのデータベース接続を処理する接続クラスがあります。私がやろうとしているのは、1つのページに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サイトでセッション状態を有効にしている場合。これは、サイトが何らかの理由でセッション状態メモリを使用できない場合(Webファームを使用していて、セッション状態にSQL Serverを使用できない場合など)は機能しません。

于 2011-06-12T07:38:24.570 に答える
-2

SqlParameterCollection次のようにして、新しいインスタンスを作成できます。

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