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

通过创建简单的会议室预订系统学习 C# 和 .NET:第 2 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (7投票s)

2020 年 2 月 5 日

CPOL

5分钟阅读

viewsIcon

9761

本部分主要介绍数据库连接。我们将从熟悉的数据连接代码开始,然后讲解如何使用强类型数据集(Typed Datasets)。

从数据库显示数据

在本部分中,请确保已安装 SQLExpress 和 SQL Management Studio。

打开 Management Studio,创建一个名为 MRooms 的数据库和一个名为 Rooms 的表。

以下是 SQL 命令

Create database MRooms;
GO
use MRooms;
create table rooms (
ID int IDENTITY(1,1000) NOT NULL,
Name varchar (10),
Location varchar (10),
Description varchar (100)
);

用一些值填充表。您可以使用此查询

insert into rooms (Name,Location,Description)
values
('Room 1','1st Floor','Big room with 15 sits'),
('Room 2','2nd Floor','Small Room'),
('Room 3','3rd Floor','Managerial Meeting Room')
;

好的,让我们创建一个页面来显示数据内容。

在 Visual Studio 中,右键单击解决方案资源管理器中的 MeetingRoom 项目,然后添加新项。

找到“带母版页的 Web 窗体”,将其命名为 Rooms.aspx,然后创建页面。

让我们从工具箱添加 GridView 来显示数据。

拖放 GridView,然后展开右侧(GridView 右侧)的小箭头,选择“添加数据源”,选择“数据库”,然后创建新连接,请确保选中“创建连接字符串”。

在服务器名称处键入 .(表示使用本地服务器),然后在数据库下拉列表中选择之前创建的 MRooms 数据库。一路点击“下一步”。

好了,运行一下,看看数据是否显示出来。

但是数据是如何加载的?连接代码在哪里? 当您创建上述数据源并按默认配置进行操作时,就已经包含了连接字符串,它描述了数据库是什么、在哪里以及如何连接(您使用的是默认的 Windows 身份验证方法),并且您还添加了一个用于选择所有房间的查询。因此,它使用该查询和连接字符串来填充您的数据。

让我们看看我们如何手动完成。 (如果您之前在 WindowsForm(VB 或 C#)中使用过数据库,您可能已经知道了。)

转到 rooms.aspx 的源代码视图,删除所有内容(拖放 GridView 时在 <asp:Content> </asp:Content> 标签内生成的内容)。这将把页面重置为空页面。

从工具箱中拖放 GridView,您会看到

   <asp:GridView ID="GridView1" runat="server"></asp:GridView>

插入了。

现在转到代码隐藏(按 F7),在 page_load 函数(每次加载页面时都会调用)内。

Write

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings
                    ["MeetingRoomsConnectionString"].ConnectionString);
        //--- Select Query.
        string cmdText = "SELECT * FROM Rooms order by Id desc";

        SqlDataAdapter adp = new SqlDataAdapter(cmdText, con);
        DataSet ds = new DataSet();
        adp.Fill(ds);

        GridView1.DataSource = ds;
        GridView1.DataBind();

您会发现它还不知道 SqlDataAdapter 等对象,但如果您添加

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

在文件顶部,错误就会消失。

再次,如果您之前进行过数据库连接,您可能对数据集(Datasets)和数据适配器(Data adapters)有所了解。

引用

基本上,数据集是临时存储数据的对象

数据适配器是能够执行 sqlQuery 并用数据填充数据集的对象。

然后,您将数据集用作 GridView 的数据源。在这种情况下,数据绑定意味着每当数据集更改时都会更新 Grid UI。

顺便说一句,我假设您已经创建了一个名为“MeetingRoomsConnectionString”的连接字符串,请确保打开 web.config 文件并验证此行是否存在,如果不存在,请添加它(这是您的连接字符串,请看 Catalog(表示数据库)和 Integrated security(表示 Windows 身份验证))。

  <connectionStrings>
    <add name="MeetingRoomsConnectionString" 
    connectionString="Data Source=.;Initial Catalog=MRooms;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

运行一下,您应该会看到与之前类似的数据视图。

添加新房间

现在我们创建另一个用于插入新房间的表单。

右键单击项目,添加新项,就像之前那样选择“带母版页的 Web 窗体”,将其命名为 NewRoomForm.aspx

然后从工具箱中,拖放一个 TextInput 字段,再拖放两个 TextInput 字段和一个按钮。您可以根据需要更改按钮文本和其他属性。

双击按钮(在设计视图中),您将被重定向到事件处理函数。

protected void Button1_Click(object sender, EventArgs e)
{
   SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings
   ["MeetingRoomsConnectionString "].ConnectionString);

            //--- Insert Query.
            string cmdText = "INSERT INTO Rooms 
            (Name,Location,Description) VALUES (@Name,@Location,@Description)";

            //--- Providing information to SQL command object about which query to
            //--- execute and from where to get database connection information.
            SqlCommand cmd = new SqlCommand(cmdText, con);

            //--- Adding parameters/Values.
            cmd.Parameters.AddWithValue("@Name", TextBox1.Text);
            cmd.Parameters.AddWithValue("@Location", TextBox2.Text);
            cmd.Parameters.AddWithValue("@Description", TextBox3.Text);

            //--- To check current state of the connection object. 
            //--- If it is closed, open the connection
            //--- to execute the insert query.
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }

            //--- Execute Query.
            cmd.ExecuteNonQuery();

            //--- close the connection.
            con.Close();
            Response.Redirect("/Rooms");
}

另外,请确保您已添加

using System.Configuration;
using System.Data;
using System.Data.SqlClient;

在顶部。

运行应用程序,在文本框中输入内容,然后单击按钮,您应该会看到新条目已添加。

……

每次需要访问数据时都调用连接字符串、创建命令并执行它实在是太麻烦了。幸运的是,微软有一个更好的方法。那就是强类型数据集对象,它能根据数据库自动生成重复操作,如查询、填充、插入和更新。

所以,让我们看看如何使用强类型数据集。右键单击项目并添加新项。在数据部分,您会看到 Dataset,将其命名为 MeetingRoomsDataset.xsd,然后点击服务器资源管理器。在这里,您会找到您的连接字符串。如果您看不到它,可以通过右键单击“数据连接”并选择“添加连接”来创建新连接,就像上次一样,使用 . 作为服务器并选择 MRooms 数据库。

将 `rooms` 表拖到数据集窗口,然后保存(Ctrl+S)。好了,现在让我们将其与 datagrid 视图连接起来,打开 Rooms.aspx,然后在设计视图中,单击 grid view 顶部的箭头。

单击“添加新数据源”,选择“对象”,然后单击“下一步”,请确保在下拉列表中选中“仅显示数据组件”,您将看到 roomsTableAdapter(自动生成的),选择它。

清除代码隐藏中的 page-load 处理程序

protected void Page_Load(object sender, EventArgs e)
        {
           //delete every thing in here
        }

运行一下,数据就会显示出来。这意味着微软已经为我们生成了连接数据库、打开连接、执行 SQL 查询、填充数据集并自动绑定到 GridView 的代码。太棒了!

那么,让我们使用这个强类型数据集来插入房间。

打开之前创建的 MeetingRoomsDataset.xsd 文件,右键单击 roomTableAdapter(rooms 表的底部部分)-> 添加查询,下一步,选择插入,然后完成。

打开 NewRoomForm.aspx,并在代码隐藏中,清除按钮点击处理程序中的所有内容(我们之前添加的手动代码)

protected void Button1_Click(object sender, EventArgs e)
        {
             // clear everything here,
        }

Insert 函数上方

roomsTableAdapter rta = new roomsTableAdapter();
 and inside the function
rta.Insert(TextBox1.Text, TextBox2.Text, TextBox3.Text);
            Response.Redirect("/rooms");

另外添加

using MeetingRooms.MeetingRoomsDatasetTableAdapters; 

在顶部。

所以整个文件看起来应该是这样的

using MeetingRooms.MeetingRoomsDatasetTableAdapters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace MeetingRooms
{
    public partial class NewRoomForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        roomsTableAdapter rta = new roomsTableAdapter();

        protected void Button1_Click(object sender, EventArgs e)
        {
            rta.Insert(TextBox1.Text, TextBox2.Text, TextBox3.Text);
            Response.Redirect("/rooms");
        }
    }
}

您可以运行并测试添加房间。您现在所做的就是用一行代码替换了所有手动代码。

如果是 2008 年,强类型数据集会很受欢迎。现在有了 ADO 数据模型和 EF 等更好的选择,但它们需要面向对象的编程概念。我们将在本系列的后续内容中介绍它们。

历史

  • 2020 年 2 月 5 日:初始版本
© . All rights reserved.