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();
            }
        }

    }

我需要特定于特定会话的临时表,以便如果不同的人访问该站点,将为他们创建不同的临时表。但是,当我运行应用程序并加载页面时,不会创建临时表。如果我更改存储过程以创建一个全局临时表,它就可以工作。不过,我认为这不是我想要的,因为我希望每个临时表都是特定于访问者的。如果访问者刷新页面,那么临时表将被销毁并重新创建。

其次,在页面加载事件上执行 proc 是否明智,或者我应该将此逻辑放入按钮单击事件中?

4

1 回答 1

2

您的表可能正在创建中。问题是,一旦连接关闭,本地临时表就会被破坏,这对您来说发生在using (var con = new SqlConnection(cs))块的末尾。

暂时忽略为什么这种方法可能是一个好主意,也可能不是一个好主意,您在网页代码范围内创建的任何 SqlConnection 对象将在返回响应后立即被处理掉。如果您真的想使用本地临时表并让它们在用户请求之间持续存在,则必须执行一些操作,例如将 SqlConnection 对象添加到静态类中的集合中而不是释放它们(包括不将它们放在 using 语句中) . 然后,当您需要检索更多数据或将更多数据写入临时表时,您将从该集合中检索用户的 SqlConnection 对象。您仍然需要担心连接打开多长时间以及何时释放 SqlConnection 对象等额外问题。

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

于 2013-05-24T14:18:53.907 回答