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






4.69/5 (7投票s)
本部分主要介绍数据库连接。我们将从熟悉的数据连接代码开始,然后讲解如何使用强类型数据集(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 日:初始版本