访问数据和连接字符串?

时间:2015-12-17 22:12:44

标签: c# sql connection-string configurationmanager

我正在创建一个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#语言的新手,有时候我没有看到小的差异。

您能否建议代码应该如何?

2 个答案:

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