Могу ли я передать объект SqlParameterCollection в команду SQL - PullRequest
4 голосов
/ 12 июня 2011

В настоящее время у меня есть класс подключения, который обрабатывает все мои подключения к базе данных.Я пытаюсь создать объект 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(); 
}

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

В сущности, в ASP.NET для сохранения чего-то от страницы к странице вам нужно использовать состояние сеанса и поместить туда свой объект, чтобы вы могли попробовать что-то вроде этого:

Страница 1:

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

Session["SqlParameters"] = newcollect;

Page 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.Это будет не работать, если ваш сайт по какой-то причине не может использовать память состояния сеанса (например, если вы находитесь на веб-ферме и не можете использовать SQL Server для состояния сеанса)

0 голосов
/ 04 марта 2012

Вы можете создать новую SqlParameterCollection следующим образом:

var P = new SqlCommand().Parameters;
...