65.9K
CodeProject 正在变化。 阅读更多。
Home

为初学者使用 ADO.NET 构建数据库应用程序。

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (28投票s)

2004 年 12 月 26 日

CPOL

3分钟阅读

viewsIcon

142148

downloadIcon

2963

一篇关于为初学者使用 ADO.NET 构建数据库应用程序的文章。

使用代码

要构建一个可以查看、插入、添加和删除记录的应用程序,我们需要 Connection、DataAdapter 和 Command 对象。有四种类型的连接、适配器和命令对象,它们是:

  1. SQL Server 7.0 或更高版本的数据库提供程序。
  2. OLE DB 的数据库提供程序。
  3. ODBC 的数据库提供程序。
  4. Oracle 的数据库提供程序。

所以,如果你使用的是 SQL Server,你将使用 SqlConnectionSqlDataAdapterSqlCommand

  1. 创建 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;
  2. 准备我们将要放置表格的容器。

    有多种方法可以查看你的表格。在这里,我将使用 DataGridTextBox 来查看我们的记录。在使用 TextBox 时,我们将使用按钮在一条记录和另一条记录之间导航。

  3. 绑定控件。

    选择你的 DataAdapter,右键单击,然后选择 Generate DataSetDataSet 是内存中数据的缓存表示。换句话说,它是你的数据库的副本。它可以包含一个 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();
  4. 记录导航

    为了在记录之间导航,我创建了一个新的变量来表示当前记录位置,即 index。要跳转到特定位置,只需读取 DataReader 直到到达我们想要的记录。

            for(int i=0;i < index;i++) 
                reader.Read(); 
  5. 更新、删除和添加 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();
  6. 通过另一种方法进行更新、删除和添加

    删除时,在使用 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 来操作记录,获取更改,并最终保存它们。

© . All rights reserved.