在页面加载时使用存储过程创建临时表
本文关键字:存储过程 创建 临时表 加载 | 更新日期: 2023-09-27 18:15:16
我想在这两个事件中创建一个临时表,这取决于在实际应用程序中哪个是最谨慎的:页面加载事件,还是第二次单击按钮。我有一个简单的存储过程
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();
}
}
}
我需要临时表特定于特定的会话,这样,如果不同的人访问该站点,将为他们创建不同的临时表。但是,当我运行应用程序并加载页面时,没有创建临时表。如果我修改进程来创建一个全局临时表,它就可以工作了。但是,我不认为这是我想要的,因为我希望每个临时表都是特定于访问者的。如果访问者刷新页面,可以销毁临时表并重新创建。
其次,在页面加载事件上执行进程是否明智,或者我应该将此逻辑放入按钮单击事件中?
您的表可能正在创建中。问题是,一旦连接关闭,本地临时表就会被销毁,对您来说,这发生在using (var con = new SqlConnection(cs))
块的末尾。
暂时忽略为什么这种方法可能是或可能不是一个好主意,在您的网页代码范围内创建的任何SqlConnection对象将在响应返回后立即被处理。如果您真的想使用本地临时表,并让它们在用户请求之间持久化,那么您必须做一些事情,比如将SqlConnection对象添加到静态类中的集合中,并且不处置它们(包括不将它们放入using语句中)。然后,当您需要检索或将更多数据写入临时表时,您将在将来的请求中从该集合中检索用户的SqlConnection对象。您仍然需要担心连接打开多长时间以及何时处置SqlConnection对象等附加问题。
虽然我不知道您想要完成什么,但您可能需要考虑在临时表中存储特定于用户的数据的替代方法。