访问数据和连接字符串?
Accessing Data and Connection String?
我正在创建 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);
这段代码看起来正确吗?我不像其他 post 那样调用任何 .open 命令,所以我不知道是否必须关闭以及如何关闭它。另外我只读数据,不写数据,所以我不使用上下文。其他 post 建议 "using" 但我如何在此代码中使用它?我尝试在块周围使用 returns 红线(如语法错误)
我看到其他 post 使用 sqlconnection 打开连接然后关闭连接,但我没有在这里使用它。我该如何关闭它?
我不明白为什么其他人说这个 post 是重复的。如果您认为是重复的并且已经提供了答案,请指出。抱歉,我是 C# 语言的新手,有时我看不出细微的差别。
你能建议代码应该怎样写吗?
当您将字符串传递给 DataAdapter
时,它会在执行 Fill
后为您关闭连接。如果您将 SqlConnection
传递给适配器,它会保留它所处的任何状态(如果关闭,它会打开它,使用它,然后关闭它。如果打开它,它会使用它并且不会关闭它)。
我会尽量避免 'long-running' 连接,并将您的读取隔离到独立的方法中,就像这样;
public DataTable RunMyQuery(...)
{
using(var connection = new SqlConnection(...))
{
connection.Open();
....
}
}
如果连接尚未关闭,using
语句的右大括号将为您关闭连接。
这种代码形式将帮助您编写不与程序其他部分交互的代码;也就是说,如果您打开一个连接并在多个地方使用它,您最终可能会遇到问题(例如,当您打开另一个数据集时,您正在读取一个数据集,并且它会阻塞多个并发读取)。
这往往是微软安排事情的方式;在 Entity Framework 你做同样的事情;
using(var context = new MyDbContext())
{
...
context.SaveChanges();
}
我正在创建 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);
这段代码看起来正确吗?我不像其他 post 那样调用任何 .open 命令,所以我不知道是否必须关闭以及如何关闭它。另外我只读数据,不写数据,所以我不使用上下文。其他 post 建议 "using" 但我如何在此代码中使用它?我尝试在块周围使用 returns 红线(如语法错误)
我看到其他 post 使用 sqlconnection 打开连接然后关闭连接,但我没有在这里使用它。我该如何关闭它?
我不明白为什么其他人说这个 post 是重复的。如果您认为是重复的并且已经提供了答案,请指出。抱歉,我是 C# 语言的新手,有时我看不出细微的差别。
你能建议代码应该怎样写吗?
当您将字符串传递给 DataAdapter
时,它会在执行 Fill
后为您关闭连接。如果您将 SqlConnection
传递给适配器,它会保留它所处的任何状态(如果关闭,它会打开它,使用它,然后关闭它。如果打开它,它会使用它并且不会关闭它)。
我会尽量避免 'long-running' 连接,并将您的读取隔离到独立的方法中,就像这样;
public DataTable RunMyQuery(...)
{
using(var connection = new SqlConnection(...))
{
connection.Open();
....
}
}
如果连接尚未关闭,using
语句的右大括号将为您关闭连接。
这种代码形式将帮助您编写不与程序其他部分交互的代码;也就是说,如果您打开一个连接并在多个地方使用它,您最终可能会遇到问题(例如,当您打开另一个数据集时,您正在读取一个数据集,并且它会阻塞多个并发读取)。
这往往是微软安排事情的方式;在 Entity Framework 你做同样的事情;
using(var context = new MyDbContext())
{
...
context.SaveChanges();
}