2013-05-24 2 views
0

Я хотел бы создать временную таблицу на любом из этих событий, в зависимости от того, какой из них будет наиболее разумным в реальном приложении: событие загрузки страницы или второй раз нажата кнопка. У меня есть простая хранимой процедураСоздайте временную таблицу с хранимой процедурой на загрузке страницы

create proc spMakeTempTable 
create table #tempTable (columnName varchar(50)) 

и C#

protected void Page_Load(object sender, EventArgs e) 
    { 
     txtDrugList.Focus(); 
     string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString; 
     using (var con = new SqlConnection(cs)) 
     { 
      using (var cmd = new SqlCommand("spMakeTempTable", con)) 
      { 
       con.Open(); 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.ExecuteNonQuery(); 
      } 
     } 

    } 

мне нужна временная таблица, чтобы быть специфическими для конкретной сессии, так что, если разные люди посещали этот сайт другой временную таблицы будет быть создан для них. Однако при запуске приложения и загрузки страницы временная таблица не создается. Если я изменяю sproc для создания глобальной временной таблицы, он работает. Я не думаю, что это то, что я хочу, хотя, поскольку я хотел бы, чтобы каждая временная таблица была ориентирована на посетителя. Если посетитель обновляет страницу, это прекрасно, что таблица temp будет уничтожена и воссоздана.

Во-вторых, разумно ли иметь выполнение proc в событии загрузки страницы, или я должен поместить эту логику в событие нажатия кнопки?

+1

Мне интересно узнать, почему вы хотите создать временную таблицу для сеанса, когда вы можете просто использовать объект 'Session'? –

+0

Что вы хотите сохранить в этой временной таблице? –

+0

На странице будет кнопка, которая отправит текст, который они набирают, в текстовое поле и вставляет его в таблицу temp. Затем другая хранимая процедура будет выполнять перекрестное соединение всего, что они ввели в таблицу temp. – wootscootinboogie

ответ

2

Возможно, ваш стол создан. Проблема в том, что локальные таблицы temp уничтожаются, как только соединение закрывается, что для вас происходит в конце вашего блока using (var con = new SqlConnection(cs)).

Игнорирование на данный момент, почему этот подход может быть или не быть хорошей идеей, любой объект SqlConnection, созданный вами в рамках кода вашей веб-страницы, будет удалён, как только будет возвращен ответ. Если вы действительно хотите использовать локальные таблицы temp и чтобы они сохранялись между пользовательскими запросами, вам нужно было бы сделать что-то вроде добавления объектов SqlConnection в коллекцию в статическом классе и не удалять их (что не включает их в инструкцию using) , Затем вы извлекли бы объект SqlConnection пользователя из этой коллекции для будущих запросов, когда вам нужно было бы получить или записать больше данных в таблицу temp. Вам все равно придется беспокоиться о дополнительных проблемах с тем, как долго оставаться открытыми и когда удалять объекты SqlConnection.

Хотя я не знаю, чего вы пытаетесь выполнить, вы можете захотеть рассмотреть альтернативные подходы к хранению пользовательских данных в временных таблицах.

+0

Хотя я был полностью осведомлен о том, что «использование» очистило соединение, и что временные таблицы существуют только до тех пор, пока соединение делает, я действительно не собирал два и два вместе, поэтому теперь это имеет смысл, в то время как мое решение было ошибочным , Похоже, что переход с переменной Session - лучший способ. – wootscootinboogie

Смежные вопросы