在DataGrids和DropDownLists中使用ADO

ado|datagrid

这是一篇关于使用可重用代码绑定ADO数据到控件的文章。

介绍
ADO是一种功能非常强大的从数据库中读取数据的技术,但是它也使人很容易搞糊涂,连接数据到DataGrid或其他控件需要一些技巧和连接方法。我使用的方法是开发标准化的可重用代码访问数据库和显示数据。我已经写了很多通过SQL语句在DataGrid中显示结果的ASP.NET页面。

这篇文章将要描述我是怎样使用可重用代码连接ADO数据,并在DataGrid和其他控件中显示结果的。我也会讲述怎么为类似的任务开发你自己的代码。
背景
这篇文章假定你已经具有C#,SQL,ADO和.NET控件的知识。

我在演示代码中使用的是NorthWind数据库,但是你可以使用任意的数据库。
使用代码Web.Config
我使用在 web.config 中的 <appSettings> 来保存程序中所要用到的字符串。如果你没这样做过,那么你应该试一试。我一般使用 web.config 保存数据库连接信息,因为这样可以使它更具有可移植性。

 <appSettings>

  <add key="dsn_SQL"

    value="SERVER=localhost;uid=myuser;password=pass;DATABASE=NorthWind;"/>

</appSettings>

DataGrid.aspx.cs
下面使 DataGrid.aspx 页面的完整代码。在这个程序中 BindGrid() 函数的作用使连接到数据库并在 DataGrid 中显示结果数据。

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.Configuration;

 

namespace Easy_ADO_Binds

{

  public class WebForm1 : System.Web.UI.Page

  {

    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    // 从 web.config 获得连接字符串

    public String strConnectSQL =

      (ConfigurationSettings.AppSettings["dsn_SQL"]);

 

    private void Page_Load(object sender, System.EventArgs e)

    {

      // 构造SQL字符串

      string SQLstring = "Select * FROM Employee";

 

      // 调用并构造BindGrid

      BindGrid(strConnectSQL, SQLstring, DataGrid1 );

    }

 

    private void BindGrid(string DBconnectString, string sqlCommand,

                           System.Web.UI.WebControls.DataGrid DGrid)

// 从数据库中加载初始化页面

// 绑定到datagrid

    {

      // 创建数据连接

      SqlConnection conn = new SqlConnection(DBconnectString);

 

      // 调用SQL语句

      SqlCommand command = new SqlCommand(sqlCommand, conn);

 

      // 创建data adapter

      SqlDataAdapter adapter = new SqlDataAdapter(command);

 

      // 创建并填充dataset

      DataSet ds = new DataSet();

      adapter.Fill(ds);

 

      // 填充并绑定到datagrid

      DGrid.DataSource = ds;

      DGrid.DataBind();

      // 关闭连接

      conn.Close();

    }

 

#region Web Form Designer generated code

    override protected void OnInit(EventArgs e)

    {

      //

      // CODEGEN: This call is required by the ASP.NET Web Form Designer.

      //

      InitializeComponent();

      base.OnInit(e);

    }

 

    private void InitializeComponent()

    {

      this.Load += new System.EventHandler(this.Page_Load);

    }

#endregion

  }

}

从 Web.Config 获得SQL字符串

允许你从 web.config 拿出你所需要的字符串,这是不是很灵活?我用这种方法指定数据库的连接,报告服务器,主页默认URL字符串以及其他一些全局性的字符串。

using System.Configuration;

// 从 web.config 获得连接字符串

public String strConnectSQL = (ConfigurationSettings.AppSettings["dsn_SQL"]);

private void BindGrid()
这时工程最后做的事情。我把这些代码放到任意的页面中,我希望能从自己的数据库中取到数据并用 DataGrid 显示出来。我不必写复杂的C#或ADO代码。随便访问它,通过数据库、SQL、 DataGrid 参数,就为我获得了数据。
BindGrid() 如何工作
你传递给 BindGrid() 一个数据库连接,一个SQL字符串和一个DataGrid 标识符,然后它就连接到数据库,运行SQL命令,在DataGrid 中显示数据,最后退出函数。
BindGrid( db, SQL, DataGrid)

BindGrid( "告诉我是什么数据库", "告诉我你想运行什么SQL语句", "告诉我你想在哪个DataGrid中显示数据")

BindGrid 输入
private void BindGrid(string DBconnectString,

   string sqlCommand, System.Web.UI.WebControls.DataGrid DGrid)

string DBconnectString: Database

string sqlCommand: SQL

System.Web.UI.WebControls.DataGrid DGrid: DataGrid

注意:你在C#中可以为这个函数指定一个Web控件作为输入。所有你必须做的事情是指定哪一个DataGrid 是你想要使用这个函数的。

private void BindGrid(string DBconnectString,

      string sqlCommand, System.Web.UI.WebControls.DataGrid DGrid)

// 从数据库中加载初始化页面

  // 绑定到datagrid

{

  // 创建数据连接

  SqlConnection conn = new SqlConnection(DBconnectString);

 

  // 调用SQL语句

  SqlCommand command = new SqlCommand(sqlCommand, conn);

 

  // 创建data adapter

  SqlDataAdapter adapter = new SqlDataAdapter(command);

 

  // 创建并填充dataset

  DataSet ds = new DataSet();

  adapter.Fill(ds);

 

  // 填充并绑定到datagrid

  DGrid.DataSource = ds;

  DGrid.DataBind();

  // 关闭连接

  conn.Close();

}

调用 BindGrid()

函数 BindGrid() 的详细说明:

数据库连接字符串:在 Web.Config 中指定

SQL 字符串:任意SQL字符串,甚至可以是存储过程

DataGrid: DataGrid 的标识符

private void Page_Load(object sender, System.EventArgs e)

{

  // 构造SQL字符串

  string SQLstring = "Select * FROM Employee";

 

  // 调用并构造BindGrid

  BindGrid(strConnectSQL, SQLstring, DataGrid1 );

}

使用多个 DataGrids

通过不同的SQL命令,在页面上放置三个 DataGrid 。如下面所示,只要调用具有不同SQL命令的 BindGrid() 三次就可以了。所以现在你可以使用相同的代码使用多个 DataGrid 。

// DataGrid 1

string SQLstring1 = "Select * FROM Employee";

BindGrid(strConnectSQL, SQLstring1, DataGrid1 );

 

// DateGrid 2

string SQLstring2 = "Select * FROM Customers";

BindGrid(strConnectSQL, SQLstring2, DataGrid2 );

 

//DataGrid3

string SQLstring3 = "Select * FROM Orsders";

BindGrid(strConnectSQL, SQLstring3, DataGrid3 );

使用 BindList()
好了。现在我们将从使用 BindGrid() 转向使用 BindList() ,它可以使用ASP.NET中的下拉列表。

代码稍微有点难理解了,因为 DropDownList  多了两个属性:
DataTextField: 下拉列表中所显示的,也就是用户所看到的。

DataValueField: 测定用户的选择的值。

这些值都被添加到 BindList() 的输入参数中,所以可以像这样运行它:

BindList(db, SQL, Text, Value, DropDownList);

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.Configuration;

 

namespace BindList

{

  public class WebForm1 : System.Web.UI.Page

  {

    protected System.Web.UI.WebControls.DropDownList DropDownList1;

    // 从 web.config 获得连接字符串

    public String strConnectSQL =

        (ConfigurationSettings.AppSettings["dsn_SQL"]);

 

    private void Page_Load(object sender, System.EventArgs e)

    {

      // 创建SQL字符串

      string SQLstring = "Select EmployeeID, FirstName + ' ' + LastName" +

                         " as name FROM Employees";

      string TextField = "name";

      string ValueField = "EmployeeID";

 

      BindList(strConnectSQL, SQLstring, TextField ,

                              ValueField, DropDownList1 );

    }

 

    private void BindList(string strConnectSQL, string SQLstring,

            string TextField, string ValueField,

            System.Web.UI.WebControls.DropDownList Dlist)

    {

      SqlConnection myConnection = new SqlConnection(strConnectSQL);

      SqlCommand myCommand = new SqlCommand( SQLstring, myConnection );

      myConnection.Open();

 

      Dlist.DataSource = myCommand.ExecuteReader();

      Dlist.DataTextField = TextField;

      Dlist.DataValueField = ValueField;

      Dlist.DataBind();

 

      myConnection.Close();

    }

 

#region Web Form Designer generated code

    override protected void OnInit(EventArgs e)

    {

      //

      // CODEGEN: This call is required by the ASP.NET Web Form Designer.

      //

      InitializeComponent();

     base.OnInit(e);

    }

 

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

    private void InitializeComponent()

    {

      this.Load += new System.EventHandler(this.Page_Load);

    }

#endregion

  }

}

有趣的地方
这样做的好处之一就是你可以在ASP.NET中指定 web 控件作为函数的输入参数。这确实改变了我的编码习惯,我现在正在开发更多的一般性的可重用代码。
为什么使用这些代码
这非常简单。一旦你要为一个特定的控件编码,你就不必再重新写一次了。你可以一次又一次地使用相同的代码。
历史
2004年11月 V1.1

时间: 2024-09-30 05:34:27

在DataGrids和DropDownLists中使用ADO的相关文章

PHP中通过ADO调用Access数据库

access|ado|数据|数据库 我看了那篇<怎样在PHP中通过ADO调用Asscess数据库和COM程序>文章后,马上作了测试,结果失败了.伤心是不是. 怎么办?我只好去PHP官方网站求助,皇天不负有心人,终于我找到了答案-- 具体的解决方法如下: (1)进入http://php.weblogs.com/adodb,下载相应的ZIP包:同MICROSOFT公司的ADO一样,该东东用PHP实现ADO同各种各样数据库打交道(太好了,所有类型的数据库都能处理). (2)解包,里面文件很多,不过有

PHP中通过ADO调用Asscess数据库

ado|数据|数据库 我看了那篇<怎样在PHP中通过ADO调用Asscess数据库和COM程序>文章后,马上作了测试,结果失败了.伤心是不是. 怎么办?我只好去PHP官方网站求助,皇天不负有心人,终于我找到了答案-- 具体的解决方法如下: (1)进入http://php.weblogs.com/adodb,下载相应的ZIP包:同MICROSOFT公司的ADO一样,该东东用PHP实现ADO同各种各样数据库打交道(太好了,所有类 型的数据库都能处理). (2)解包,里面文件很多,不过有用的只有oh

在DELPHI程序中使用ADO对象存取ODBC数据

作为一个ASP爱好者,笔者经常在ASP页面中使用ADO对象操作ODBC数据库,觉得用ASP创建WEB应用系统确定挺方便的.虽然在编程生涯中,笔者更喜欢Borland系列产品,对微软产品有点排斥,对ASP却是例外.某天,灵机一动,ADO对象是一个标准OLE对象,如果在DELPHI应用程序中能利用ADO操作数据库,应该挺不错.尤其在用DELPHI做网络数据库应用程序时,如果所在的WEB站点是WINNT站点并且支持ASP页面,就可以用ADO对象访问ODBC数据库,而不用把那么大的BDE再上载到站点上去

在CB5中使用ADO数据库编程

本文介绍了在 C++Builder 5环境下新增的ADO控件的使用方法,并给出了一个简单的实例. 一.ADO概述 ADO(Active Data Object) 是微软公司基于OLE DB的数据库模型.它实现了一系列COM接口,通过数据提供者(Data Provider)和数据使用者( Data Consumer)来实现广义的数据存取.ADO模型一方面简化了数据存取,例如使用Jet OLE DB Provider可以实现Access数据库的无DSN连接:另一方面,在ASP等Internet应用中

C# Builder个人版中使用ADO.NET

摘要:在本文演示了如何使用C# Builder Personal中使用ADO.NET方法,连接到一个MSDE数据库,并创建一个表,插入和选择记录,然后在一个数据网格(DataGrid)中显示记录. C# Builder一大新特色就是可以使用Borland Data Providers for ADO.NET在设计时用来支持连接并操作数据库,特定的用于DB2.InterBase.Oracle.SQL Server/MSDE等的驱动程序,以及添加第三方驱动程序(如dbExpress)的潜力. 然而,

PHP中通过ADO调用Access数据库的方法测试不通过_php技巧

我看了那篇<怎样在PHP中通过ADO调用Asscess数据库和COM程序>文章后,马上作了测试,结果失败了.伤心是不是.  怎么办?我只好去PHP官方网站求助,皇天不负有心人,终于我找到了答案--  具体的解决方法如下:  (1)下载相应的ZIP包:同MICROSOFT公司的ADO一样,该东东用PHP实现ADO同各种各样数据库打交道(太好了,所有类型的数据库都能处理).(2)解包,里面文件很多,不过有用的只有ohtml.inc.php和adodb.inc.php,(经我测试并不是这样)把它们复

visual studio-vc中使用ado,使用Unicode字符集下comdef.h文件中报错

问题描述 vc中使用ado,使用Unicode字符集下comdef.h文件中报错 vc中使用ado,使用Unicode字符集下comdef.h文件中的_com_error::ErrorMessage() const throw() 函数报错,求解决方法,具体位置如下: inline const TCHAR * _com_error::ErrorMessage() const throw() { if (m_pszMsg == NULL) { FormatMessage(FORMAT_MESSAG

VC中使用ADO开发数据库应用程序简明教程_C 语言

本文实例讲述了VC中使用ADO开发数据库应用程序的方法.分享给大家供大家参考,具体如下: 一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据.ADO 最主要的优点是易于使用.速度快.内存支出少和磁盘遗迹小.ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量.高性能的接口.之所以

怎样在PHP中通过ADO调用Access数据库和COM程序

access|ado|程序|数据|数据库 PHP4已经支持Microsoft的COM技术.然而文档中在COM部分却提得很少. 这儿是几个我试过的例子.希望这些给你一些概念.注意的是这些只能运行在32位的Microsoft Windows平台下. 用php激活ADO ADO是Microsoft的数据库对象技术.ADO里面包括连接数据库的对象,从查询语句中返回数据的记录集对象和表现数据元素的字段对象. 许多数据库不直接支持ADO.代之的是很多数据库支持低两级的Microsoft数据库技术:ODBC和