为初学者使用 ADO.NET 构建数据库应用程序。
一篇关于为初学者使用 ADO.NET 构建数据库应用程序的文章。
使用代码
要构建一个可以查看、插入、添加和删除记录的应用程序,我们需要 Connection、DataAdapter 和 Command 对象。有四种类型的连接、适配器和命令对象,它们是:
- SQL Server 7.0 或更高版本的数据库提供程序。
- OLE DB 的数据库提供程序。
- ODBC 的数据库提供程序。
- Oracle 的数据库提供程序。
所以,如果你使用的是 SQL Server,你将使用 SqlConnection
、SqlDataAdapter
和 SqlCommand
。
- 创建 Connection、DataAdapter 和 Command 对象
为了轻松构建这些东西,请在 Server Explorer 中添加一个新的连接。成功添加新连接后,从连接中选择我们将要操作的表,然后将其拖到你的窗体上。它将自动创建一个连接、一个 DataAdapter 和四个 Command 对象。在你的代码中检查一下。这四个 Command 对象在你想要选择、插入、更新或删除记录时执行。你需要表的主键才能拥有这四个命令。否则,你将没有更新和删除 Command 对象。
手动构建(硬编码方式)
OleDbConnection myConnection = new OleDbConnection(ConnectionString); OleDbCommand myCommand = new OleDbCommand(SelectQuery,myConnection); myConnection.Open(); OleDbDataAdapter adapter=new OleDbDataAdapter(); adapter.SelectCommand = myCommand;
- 准备我们将要放置表格的容器。
有多种方法可以查看你的表格。在这里,我将使用
DataGrid
和TextBox
来查看我们的记录。在使用TextBox
时,我们将使用按钮在一条记录和另一条记录之间导航。 - 绑定控件。
选择你的 DataAdapter,右键单击,然后选择 Generate
DataSet
。DataSet
是内存中数据的缓存表示。换句话说,它是你的数据库的副本。它可以包含一个DataSet
中的多个表。你必须首先从你的 DataAdapter 中填充DataSet
。使用这个DataSet
,你可以填充DataGrid
。oleDbDataAdapter1.Fill(dataSet11,"Student"); dataGrid1.SetDataBinding(dataSet11,"Student");
放置此绑定的最佳位置是你的窗体加载时(还能在哪里呢?)。
为了在
TextBox
中查看记录,我们将借助 DataReader 对象。可能有一个简单的方法。如果你找到了,请告诉我。在这里,我将创建一个名为reader
的对象,类型为System.Data.OleDb.OleDbDataReader
。将 DataReader 读取并放入TextBox
的代码如下:oleDbConnection1.Open(); reader=oleDbSelectCommand1.ExecuteReader(); reader.Read(); nim.Text =reader.GetInt32(0).ToString(); name.Text =reader.GetString(1); oleDbConnection1.Close();
- 记录导航
为了在记录之间导航,我创建了一个新的变量来表示当前记录位置,即
index
。要跳转到特定位置,只需读取 DataReader 直到到达我们想要的记录。for(int i=0;i < index;i++) reader.Read();
- 更新、删除和添加 DataGrid
为了在从
DataGrid
更新、插入和删除后保存,请通过执行DataSet
表的GetChanges()
来获取对DataGrid
所做的更改。当你对DataGrid
进行操作时,它也会影响DataSet
。接下来,对 DataAdapter 对象进行更新。这将把你的更改保存到数据库中。DataTable table=dataSet11.Tables["Student"].GetChanges(); if(table!=null) { oleDbDataAdapter1.Update(table); dataSet11.Tables["Student"].AcceptChanges(); }
AcceptChanges()
将清除DataSet
中的更改,并使其成为一个干净的DataSet
。要从
DataGrid
中删除一条记录,我使用弹出菜单。当用户单击DataGrid
时,找到被单击的行,使用if(dataGrid1.HitTest(e.X, e.Y).Type== System.Windows.Forms.DataGrid.HitTestType.Cell ||dataGrid1.HitTest(e.X, e.Y).Type== System.Windows.Forms.DataGrid.HitTestType.RowHeader) { dataGrid1.Select(dataGrid1.HitTest(e.X, e.Y).Row); dataGridRow=dataGrid1.HitTest(e.X, e.Y).Row; }
HitTest
将使用特定点(在这种情况下是单击时的鼠标位置)获取有关网格的信息,例如被单击点的行号和列号。获取行索引后,删除记录就像切蛋糕一样简单。dataSet11.Tables["Student"].Rows[dataGridRow].Delete();
- 通过另一种方法进行更新、删除和添加
删除时,在使用
TextBox
方法时,从我们之前创建的index
中获取要删除的行的表和行索引。dataSet11.Tables["Student"].Rows[index].Delete(); //save changes DataTable table=dataSet11.Tables["Student"].GetChanges(); if(table!=null) { oleDbDataAdapter1.Update(table); dataSet11.Tables["Student"].AcceptChanges(); }
更新的代码
DataRow row=dataSet11.Tables["Student"].Rows[index-1]; row[0]=nim.Text; row[1]=name.Text; //save changes DataTable table=dataSet11.Tables["Student"].GetChanges(); if(table!=null) { oleDbDataAdapter1.Update(table); dataSet11.Tables["Student"].AcceptChanges(); }
添加的代码
DataRow row; DataTable table= dataSet11.Tables["Student"]; row= table.NewRow(); row[0]=nim.Text; row[1]=name.Text; table.Rows.Add(row); //save changes DataTable table=dataSet11.Tables["Student"].GetChanges(); if(table!=null) { oleDbDataAdapter1.Update(table); dataSet11.Tables["Student"].AcceptChanges(); }
你可以通过另一种方式进行删除、更新和删除。还记得上面的 Command 对象吗?例如,如果你要删除
StudentNo
为 5 且姓名为“Charlie”的记录,请先设置命令的参数,然后执行命令。oleDbConnection1.Open(); OleDbParameter myParm = oleDbDeleteCommand1.Parameters["Original_StudentNo"]; myParm.Value = 5; myParm=oleDbDeleteCommand1.Parameters["Original_Name"]; myParm.Value = "Charlie"; myParm=oleDbDeleteCommand1.Parameters["Original_Name1"]; myParm.Value = "Charlie"; oleDbDeleteCommand1.ExecuteNonQuery(); oleDbConnection1.Close();
结论
你可以将 DataSet
看作是你的表的副本,DataAdapter 看作是你的数据库,DataReader 看作是行的集合。你可以通过 DataSet
来操作记录,获取更改,并最终保存它们。