在页面加载时使用存储过程创建临时表

本文关键字:存储过程 创建 临时表 加载 | 更新日期: 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对象等附加问题。

虽然我不知道您想要完成什么,但您可能需要考虑在临时表中存储特定于用户的数据的替代方法。