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