在数据库操作中,获取数据并绑定到GridView上一般来说是我们的目标,下面是经常使用到的一种方式,利用DataAdapter和DataSet,DataTable的配合来实现。
先来试试DataAdapter与DataTable。
- 首先获取一个数据库连接对象
- 再要声明一个SqlCommand对象
- 申请一个DataAdapter对象和DataTable对象
- 然后开始进行数据的绑定工作
String connstr = "Data Source=.\\SQLEXPRESS;Initial Catalog=ForDataAdapter;Integrated Security=True";
SqlConnection conn = null;
try
{
conn = new SqlConnection(connstr);
conn.Open();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (conn.State==ConnectionState.Open)
{
Console.WriteLine("数据库连接成功!");
}
DataTable dataTable = new DataTable("Student");
dataTable.Clear();
String SQLINSERT = "INSERT into Student values('"+textBox_Name.Text.Trim().ToString()+"','"
+textBox_Class.Text.Trim().ToString()+"','"+textBox_Age.Text.Trim()+"')";
SqlCommand cmd = new SqlCommand(SQLINSERT, conn);
cmd.ExecuteNonQuery();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(dataTable);
dataTable.Clear();
//显示消息
SqlDataAdapter adaterSelect = new SqlDataAdapter("Select * from Student", conn);
adaterSelect.Fill(dataTable);
dataGridView1.DataSource = dataTable.DefaultView;
注意其中,适配器adapter来填充了datatable类的实例(adapter.Fill(dataTable),作用就是添加或刷新行以与数据源中的行进行匹配
DataAdapter与DataSet进行配合的使用:
- 首先是建立一个数据库连接对象,并打开它
- 然后是创建一个适配器,当然方式不止一种(还可以通过SqlCommand方式)
- 声明DataSet,然后把适配器里面的内容填充到数据集中
- 最后只需要把数据集作为GridView的数据源就可以了
String connstr = "Data Source=.\\SQLEXPRESS;Initial Catalog=ForDataAdapter;Integrated Security=True";
SqlConnection conn = null;
try
{
conn = new SqlConnection(connstr);
conn.Open();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (conn .State==ConnectionState.Open)
{
Console.WriteLine("数据库连接成功!");
}
DataTable dataTable = new DataTable("Student");
dataTable.Clear();
String SQLSELECT = "SELECT * from Student order by Name";
SqlDataAdapter adapter = new SqlDataAdapter(SQLSELECT, conn);
DataSet dataset = new DataSet();
adapter.Fill(dataset, "Student");
dataGridView1.DataSource = dataset;
dataGridView1.DataMember = "Student";
接下来一起看一看DataReader ,DataReader类是一个简单的数据集,用于从数据源中检索只读数据集,常用于检索大量的数据。DataReader类只允许只读,顺向的方式查看其中所存储的数据,提供一个非常有效率的数据查看模式,同时,他还是一种非常节省资源的数据对象!
但是需要注意的是,DataReader是一个比较“强硬”方式,它会独占连接对象,所以每次打开一个新的对象的时候都必须关闭前一个DataReader对象,否则将会收到其产生的异常。
使用步骤:
- 创建一个数据库连接对象,并记得打开
- 创建SqlCommand类的实例,然后通过它得到SqlDataReader对象
- 读取SqlDataReader实例的内容即可
private void button_AddToLB_Click(object sender, EventArgs e)
{
String connstr = "Data Source=.\\SQLEXPRESS;Initial Catalog=ForDataAdapter;Integrated Security=True";
SqlConnection conn = null;
try
{
conn = new SqlConnection(connstr);
conn.Open();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
if (conn.State == ConnectionState.Open)
{
Console.WriteLine("数据库连接成功!");
}
SqlCommand cmd = new SqlCommand("Select * from Student", conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
listBox1.Items.Add(reader[0].ToString() + "\t" + reader[1].ToString() + "\t" + reader[2].ToString() + "\n");
}
}
reader.Close();
}
查阅资料得到:位于System.Data命名空间下的DataSet类是支持ADO.NET的断开式,分布式数据方案的核心对象,他是数据的内存主流的表示形式,无论数据源是什么,他都会提供一致的关系编程模型。另外,他还用于多种不同的数据源。例如用于XML数据或用于管理应用程序本地的数据。DataSet类表示包括相关表,约束和标间关系在内的整个数据集。
总结:
在使用DateSet时应该注意,DataSet表示的可以不只是一个标的内容,但是却是以顺序方式来存储数据源信息的,所以在使用的时候一定要分清即将使用的是哪一个数据源对应的内容。
如下:dataGridVIew.DataSource=dataSet.Table[0].DefaultView;
其中的索引便可以具体到对应的数据集。