我正在创建一个WinForms应用程序。我把我的连接字符串放在App.config文件中。然后创建连接字符串变量
string gLwConnStr = ConfigurationManager.ConnectionStrings["LWConnectionString"].ConnectionString;
string sql = "Select * from Users Where LoginName='" + System.Security.Principal.WindowsIdentity.GetCurrent().Name + "'";
string tbl = "User";
DataTable dt = new DataTable(tblName);
SqlDataAdapter da = new SqlDataAdapter(sql, gLwConnStr);
da.Fill(dt);
此代码看起来是否正确?我不像其他帖子那样调用任何.open命令,因此我不知道是否必须关闭以及如何关闭它。我也只读数据,而不是写数据所以我不使用上下文。其他帖子建议“使用”,但我如何在此代码中使用它?我尝试在块周围使用它返回红线(如语法错误)
我看到其他帖子使用sqlconnection打开连接然后关闭连接但我不在这里使用它。我怎么关闭它?
我不明白为什么其他人说这篇文章是重复的。如果你认为它是重复的并且答案已经提供,请指出。对不起,我是C#语言的新手,有时候我没有看到小的差异。
您能否建议代码应该如何?
答案 0 :(得分:5)
当您将字符串传递给DataAdapter
时,它会在Fill
执行后关闭您的连接。如果你将SqlConnection
传递给适配器,它会将它保留在它找到的任何状态(如果关闭它会打开它,使用它,然后关闭它。如果打开则使用它并且不关闭它。)
答案 1 :(得分:0)
我会尽量避免“长时间运行”的连接,并将您的读取分离为自包含的方法,如此;
public DataTable RunMyQuery(...)
{
using(var connection = new SqlConnection(...))
{
connection.Open();
....
}
}
using
语句的右括号将为您关闭连接,如果它尚未关闭。
这种形式的代码将帮助您编写不与程序其他部分交互的代码;也就是说,如果你打开一个连接并在很多地方使用它,你最终可能会遇到问题(比如说,当你打开另一个数据集时,你已经读了一半数据,而且它会因多次并发读取而窒息)。
这往往是微软安排事情的方式;在实体框架中,你做同样的事情;
using(var context = new MyDbContext())
{
...
context.SaveChanges();
}