哪种做法很好: - 是否应在函数或外部函数中声明变量?
0.1。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnLoad_Click(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
**private SqlDataAdapter da;
private SqlConnection conn;
BindingSource bsource = new BindingSource();
DataSet ds = null;
string sql;**
string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
conn = new SqlConnection(connectionString);
sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";
da = new SqlDataAdapter(sql, conn);
conn.Open();
ds = new DataSet();
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
da.Fill(ds, "Orders");
bsource.DataSource = ds.Tables["Orders"];
dgv.DataSource = bsource;
}
}
0.2。
public partial class Form1 : Form
{
**private SqlDataAdapter da;
private SqlConnection conn;
BindingSource bsource = new BindingSource();
DataSet ds = null;
string sql;**
public Form1()
{
InitializeComponent();
}
private void btnLoad_Click(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
conn = new SqlConnection(connectionString);
sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";
da = new SqlDataAdapter(sql, conn);
conn.Open();
ds = new DataSet();
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
da.Fill(ds, "Orders");
bsource.DataSource = ds.Tables["Orders"];
dgv.DataSource = bsource;
}
}
答案 0 :(得分:3)
在您需要访问它的范围内声明变量。如果在方法之外不需要它,请不要将其声明为字段,而是将其声明为局部变量。通过这种方式,您可以简化代码并防止令人讨厌的错误。
在这种情况下,我会使用局部变量。另一个特定于变量类型的原因。您应该在完成连接后立即关闭连接。否则,连接池(默认启用)假定它仍在使用中。因此,它将打开另一个物理连接,而不是重用它,这会降低性能,有时会导致异常。
使用using
语句,即使出错,也可以确保连接处理/关闭:
private void LoadData()
{
DataSet ds = new DataSet();
string sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";
string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
using(var conn = new SqlConnection(connectionString))
using(var da = new SqlDataAdapter(sql, conn))
{
// if you use DataAdapter.Fill you don't need to open the connection
da.Fill(ds, "Orders");
// ...
}
}
答案 1 :(得分:0)
尽可能在内容范围内声明变量,因此垃圾收集器可以在不再需要它时立即将其删除。
答案 2 :(得分:0)
声明变量的两种方式之间的主要区别在于您将使用它们的方式。 在你的LoadData函数中,你要声明sql字符串并在SqlDataAdapter之后立即使用它,然后声明应该在函数中进行,因为你正在使用它来准确地“'之后立即调用方法。 如果您希望能够读取,修改或获取某个变量的值,但在您运行之外,那么您应该在编写该类时立即声明它。 TLDR:这完全取决于你是否只在某个函数中使用该变量,或者你是否希望它可以被许多可能想要操作这个变量的方法访问。
答案 3 :(得分:0)
你应该总是选择最具限制性但可能的方法,这不仅指变量,而且指几乎所有东西:字段,属性,方法,类可见性等。通过这样做,你最大限度地减少陷入困境的机会(意外地使用您此时不打算使用的变量,字段和方法)。如果你看到范围要缩小,你几乎总能轻易扩展它,反过来会导致困难时间......