.net项目中时长会有用到临时表的操作
结果如下所示
但是在SqlSugar中可能因为会话问题导致临时表访问受限
搜索到的方式
var conn = (SqlConnection)sugarClient.Ado.Connection;if (conn.State != System.Data.ConnectionState.Open) {conn.Open();}using (var cmd = new SqlCommand()){cmd.Connection = conn;cmd.CommandText = "create table #abc(a int)";cmd.ExecuteNonQuery();cmd.CommandText = "insert into #abc values(1)";cmd.ExecuteNonQuery();cmd.CommandText = "select * from #abc";using (var read = cmd.ExecuteReader()){while (read.Read()) { }}}
配置关闭IsAutoCloseConnection 为false,
感觉太麻烦,于是研究了下
此时可使用
//5.0.6.3using (db.Ado.OpenAlways()) {db.Queryable...db.Insertable...//比如当前会话生效的临时表就需要长连接,不然创建了访问不了}
跨方法使用可以按如下方式
SugarConnection connection;
public void aa()
{connection = db.Ado.OpenAlways();var spid = connection.Context.Ado.GetString("SELECT @@SPID");
}public void bb()
{var spid = connection.Context.Ado.GetString("SELECT @@SPID");
}
可以看到两次获取到的spid是一致的.确保是处在同一会话中,这样临时表也就能正常使用了,需要注意在合适的位置Dispose释放连接(如finally代码块中).