我是c#的新手。我正在使用Windows窗体,我从/向sql数据库读/写数据。在我的应用程序中,我多次重用连接字符串(在app.config文件中)和sqlCommand,没有问题。
如下面的代码所示,我使用的是DataTable对象。我可以在同一表单中多次重复使用相同的DataTable对象(MyDataTable)吗?这样做的最佳做法是什么?谢谢。
MyConnection.Open();
SqlCommand cm = new SqlCommand("SELECT * FROM table_Price");
cm.Connection = MyConnection;
SqlDataAdapter DataAdapter = new SqlDataAdapter(cm);
DataTable MyDataTable = new DataTable();
DataAdapter.Fill(MyDataTable);
答案 0 :(得分:1)
只需将实例分配给一个类变量(我将原始代码放在一个方法中,以明确它是如何工作的):
private DataTable myDataTable; // create a class scoped variable
private void X()
{
MyConnection.Open();
SqlCommand cm = new SqlCommand("SELECT * FROM table_Price");
cm.Connection = MyConnection;
SqlDataAdapter dataAdapter = new SqlDataAdapter(cm);
this.myDataTable = new DataTable(); // assign it here
DataAdapter.Fill(this.myDataTable);
}
private void Y()
{
// reuse this.myDataTable here
}
请阅读MSDN上的课程和班级成员:
答案 1 :(得分:0)
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace demo
{
public static class Extensions
{
public static DataTable DataTable(this DataGridView sender)
{
return ((DataTable)sender.DataSource);
}
}
}
现在让我们使用它
var demo = dataGridView1.DataTable()
.AsEnumerable()
.Where(row => row.Field<string>("LastName") == "Payne")
.Select(row => row).FirstOrDefault();
或者在扩展名
中使用AsEnumerablepublic static class Extensions
{
public static DataTable DataTable(this DataGridView sender)
{
return ((DataTable)sender.DataSource);
}
public static EnumerableRowCollection<DataRow> DataTableEnumerable(this DataGridView sender)
{
return ((DataTable)sender.DataSource).AsEnumerable();
}
}
当然,如果不以这种方式工作,我们会使用Patrick Hofman建议的东西。
这是VS2013中的working example,而不是针对DataGridView,我将使用BindingSource,将DataSource设置为DataTable,然后BindingSource成为DataGridView的数据源,因此扩展方法现在用于BindingSource的。
public static DataTable DataTable(this BindingSource sender)
{
return ((DataTable)sender.DataSource);
}