Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在页面加载时使用存储过程创建临时表_C#_Asp.net_Ado.net - Fatal编程技术网

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

C# 在页面加载时使用存储过程创建临时表,c#,asp.net,ado.net,C#,Asp.net,Ado.net,我想为这两个事件中的任何一个创建一个临时表,这取决于在实际应用程序中哪个是最谨慎的:页面加载事件,还是第二次单击按钮。我有一个简单的 create proc spMakeTempTable create table #tempTable (columnName varchar(50)) 和c# 我需要临时表是特定于一个特定的会话,这样,如果不同的人访问了网站,将为他们创建一个不同的临时表。但是,当我运行应用程序并加载页面时,不会创建临时表。如果我更改存储过程以创建全局临时表,它将起作用。不过,

我想为这两个事件中的任何一个创建一个临时表,这取决于在实际应用程序中哪个是最谨慎的:页面加载事件,还是第二次单击按钮。我有一个简单的

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

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


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

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

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


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

我感兴趣的是你为什么要为一个会话创建一个临时表,当您可以只使用
会话
对象时?您希望在此临时表中存储什么?页面上会有一个按钮,将他们键入的文本发送到文本框中,并将其插入临时表中。然后,另一个存储过程将对他们输入临时表的所有内容执行交叉联接。@George,因为我是noob,自然:)。我会阅读会话。它们已经被定义,并且是用于您所做工作的标准。虽然我完全意识到,
使用
清理了连接,并且临时表只在连接存在的时间内存在,但我并没有真正将二和二放在一起,所以现在它是完全合理的,而我的解决方案是有缺陷的。似乎使用会话变量是最好的方法。
   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();
            }
        }

    }