C# 为什么SqlConnection会忘记数据库类型
我最近发布了一个关于SqlConnection在“ChangeDatabase”范围结束时丢失其数据库信息的问题(当我认为该问题与实际问题无关时,我立即删除了该问题)。例如:C# 为什么SqlConnection会忘记数据库类型,c#,.net,sqlconnection,C#,.net,Sqlconnection,我最近发布了一个关于SqlConnection在“ChangeDatabase”范围结束时丢失其数据库信息的问题(当我认为该问题与实际问题无关时,我立即删除了该问题)。例如: //Other code... dbConn = new SqlConnection(dbConnBuilder.ConnectionString); dbConn.Open(); dbConn.ChangeDatabase(currentDatabase); dbConn.Clos
//Other code...
dbConn = new SqlConnection(dbConnBuilder.ConnectionString);
dbConn.Open();
dbConn.ChangeDatabase(currentDatabase);
dbConn.Close();
}
我的问题是:
SqlConnection
对象并在需要时打开和关闭它是一种不好的做法dbConn.Database
不记得currentDatabase
在ChangeDatabase(不是变量的方法)之后“超出范围”?(见鬼,我不知道像ChangeDatabase
这样的方法可以知道范围)Data Source=server.name.com;Persist Security Info=True;User ID=username;Password=password
谢谢各位,如果我能给你们提供更多信息,让我知道,我还在学习使用S.O.所以只要确保每次需要执行语句时都调用changedatabase:-)所以只要确保每次需要执行语句时都调用changedatabase:-)调用
Close()
会完全破坏对象,因此,您不应该在之后读取它的任何属性
事实上,甚至应该有一个“after”,因为您不应该调用Close()
。相反,使用块在中实例化连接,这样它将调用Dispose()
,这与Close()
的作用相同,但无论您如何离开块,都保证这样做。调用Close()
完全销毁对象,因此,您不应该在之后读取它的任何属性
事实上,甚至应该有一个“after”,因为您不应该调用Close()
。相反,使用
块在中实例化连接,这样它将调用Dispose()
,这与Close()
的作用相同,但无论您如何离开块,都保证这样做。谢谢:-)。那会有用的,不过我希望把它抽象出来,这样我就可以说:获取数据库并使用它,而不是获取、设置然后使用它。谢谢:-)。那会有用的,但我希望能把它抽象出来,这样我就可以说:获取数据库并使用它,而不是获取、设置然后使用它。那么,重建真的是唯一的方法吗?(保持SqlConnection是一种不好的方法?)。不管怎么说,保持它不变并没有什么好处,因为它有一个底层连接池。经验法则——除了一些合理的例外——是对任何实现IDisposable
的东西使用use
。@Cpfohl:我被你的问题弄糊涂了。如果基础连接已经是Close()
d,那么保留SqlConnection
对象有什么意义?如果您想实现自己的连接池(出于其他原因,这是一个坏主意),您会希望保持开放的连接,对吗?还是你想做些不同的事情?Fwiw:如果你每次关上门都会完全破坏房间之间的联系,那就太糟糕了。所以,重建确实是唯一的解决办法?(保持SqlConnection是一种不好的方法?)。不管怎么说,保持它不变并没有什么好处,因为它有一个底层连接池。经验法则——除了一些合理的例外——是对任何实现IDisposable
的东西使用use
。@Cpfohl:我被你的问题弄糊涂了。如果基础连接已经是Close()
d,那么保留SqlConnection
对象有什么意义?如果您想实现自己的连接池(出于其他原因,这是一个坏主意),您会希望保持开放的连接,对吗?还是你想做些不同的事情?Fwiw:如果你每次关上门都会完全破坏房间之间的联系,那就太糟糕了。