.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代碼塊中).