C# 数据库连接:如何连接 SQL Server(示例)
它可以处理不同类型的数据库。它可以处理最常见的数据库,如 Oracle 和 Microsoft SQL Server。
它还可以处理新的数据库形式,如 MongoDB 和 MySQL。
数据库连接基础知识
C# 和 .Net 可以处理大多数数据库,最常见的如 Oracle 和 Microsoft SQL Server。但对于所有数据库,处理它们背后的逻辑大多是相同的。
在我们的示例中,我们将以 Microsoft SQL Server 作为我们的数据库。为了学习目的,您可以下载并使用Microsoft SQL Server Express Edition,这是 Microsoft 提供的免费数据库软件。
在处理数据库时,以下概念适用于所有数据库。
- 连接 – 要处理数据库中的数据,第一步就是连接。数据库连接通常包含以下参数。
- 数据库名称或数据源 – 第一个重要参数是要建立连接的数据库名称。每个连接一次只能处理一个数据库。
- 凭据 – 下一个重要方面是用于建立数据库连接所需的用户名和密码。它确保用户名和密码具有连接到数据库的必要权限。
- 可选参数 – 对于每种数据库类型,您可以指定可选参数,以提供有关 .net 如何处理数据库连接的更多信息。例如,您可以为连接的活动时间指定一个参数。如果在特定时间段内没有执行任何操作,则该参数将确定连接是否必须关闭。
- 从数据库选择数据 – 建立连接后,下一步就是从数据库获取数据。C# 可以对数据库执行“SQL”select 命令。可以使用“SQL”语句从数据库中的特定表中获取数据。
- 将数据插入数据库 – C# 也可用于将记录插入数据库。可以为数据库中需要插入的每一行在 C# 中指定值。
- 将数据更新到数据库 – C# 也可用于将现有记录更新到数据库。可以为数据库中需要更新的每一行在 C# 中指定新值。
- 从数据库删除数据 – C# 也可用于将记录插入数据库。可以使用 C# 中的 select 命令指定需要删除的行。
好的,既然我们已经看到了每个操作的理论,让我们进入后面的部分,看看如何在 C# 中执行数据库操作。
C# 中的 SQL 命令
C# 中的SqlCommand允许用户查询并向数据库发送命令。SQL 命令由 SQL 连接对象指定。使用两个方法,ExecuteReader 方法用于查询结果,ExecuteNonQuery 用于插入、更新和删除命令。它是最适合不同命令的方法。
如何将 C# 连接到数据库
现在,让我们看一下建立数据库连接所需的代码。在我们的示例中,我们将连接到一个名为 Demodb 的数据库。用于连接数据库的凭据如下:
- 用户名 – sa
- 密码 – demo123
我们将看到一个简单的 Windows 窗体应用程序来处理数据库。我们将有一个名为“Connect”的简单按钮,用于连接到数据库。
那么,让我们按照以下步骤来实现这一点:
步骤 1)第一步涉及在 Visual Studio 中创建新项目。启动 Visual Studio 后,您需要选择菜单选项 New->Project。
步骤 2)下一步是选择项目类型为 Windows 窗体应用程序。在这里,我们还需要指定项目的名称和位置。
- 在项目对话框中,我们可以看到创建 Visual Studio 中不同类型项目的各种选项。单击左侧的 Windows 选项。
- 当我们单击上一步中的 Windows 选项时,我们将能够看到 Windows 窗体应用程序的选项。单击此选项。
- 然后我们为应用程序命名,在本例中是“DemoApplication”。我们还需要提供一个位置来存储我们的应用程序。
- 最后,我们单击“确定”按钮,让 Visual Studio 创建我们的项目。
步骤 3)现在从工具箱向 Windows 窗体添加一个按钮。将按钮的文本属性设置为 Connect。它看起来会是这样的:
步骤 4)现在双击窗体,以便为按钮点击事件的代码添加一个事件处理程序。在事件处理程序中,添加以下代码。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string connetionString; SqlConnection cnn; connetionString = @"Data Source=WIN-50GP30FGO75;Initial Catalog=Demodb;User ID=sa;Password=demol23"; cnn = new SqlConnection(connetionString); cnn.Open(); MessageBox.Show("Connection Open !"); cnn.Close(); } } }
代码解释:
- 第一步是创建将用于创建连接字符串和 SQL Server 数据库连接的变量。
- 下一步是创建连接字符串。连接字符串需要正确指定,C# 才能理解连接字符串。连接字符串包含以下部分:
- Data Source – 这是数据库所在的服务器的名称。在我们的例子中,它驻留在名为 WIN- 50GP30FGO75 的计算机上。
- Initial Catalog 用于指定数据库的名称。
- UserID 和 Password 是连接到数据库所需的凭据。
- 接下来,我们将连接字符串赋给变量 cnn。类型为 SqlConnection 的变量 cnn 用于建立到数据库的连接。
- 接下来,我们使用 cnn 变量的 Open 方法打开到数据库的连接。然后,我们向用户显示一条消息,告知连接已建立。
- 操作成功完成后,我们关闭到数据库的连接。如果数据库上不需要执行其他操作,关闭数据库连接始终是一个好习惯。
设置上述代码并使用 Visual Studio 执行项目后,您将看到以下输出。显示窗体后,单击 Connect 按钮。
输出:-
单击“connect”按钮后,从输出中可以看到数据库连接已建立。因此,显示了消息框。
使用 SqlDataReader 访问数据
为了展示 C# 如何访问数据,让我们假设我们的数据库中有以下构件。
- 一个名为 demotb 的表。该表将用于存储各种教程的 ID 和名称。
- 该表将有 2 列,一列名为“TutorialID”,另一列名为“TutorialName”。
- 目前,该表将包含如下所示的 2 行。
TutorialID | TutorialName |
---|---|
1 | C# |
2 | ASP.Net |
让我们更改窗体中的代码,以便查询这些数据并通过消息框显示信息。请注意,此处输入的所有代码都是上一个部分中为数据连接编写的代码的延续。
步骤 1)让我们将代码分成两部分,以便用户更容易理解。
- 第一部分是构造我们的“select”语句,它将用于从数据库读取数据。
- 然后我们将对数据库执行“select”语句,并相应地获取所有表行。
代码解释:
- 第一步是创建以下变量:
- SQLCommand – “SQLCommand”是 C# 中定义的类。此类用于执行对数据库的读写操作。因此,第一步是确保我们创建一个此类的变量类型。然后将在读取数据库数据的后续步骤中使用此变量。
- DataReader 对象用于获取 SQL 查询指定的所有数据。然后我们可以使用数据读取器逐行读取所有表行。
- 然后我们定义两个字符串变量,一个是“SQL”,用于保存我们的 SQL 命令字符串。下一个是“Output”,它将包含所有表值。
- 下一步是定义将用于我们数据库的 SQL 语句。在我们的例子中,它是“Select TutorialID, TutorialName from demotb”。这将从 demotb 表中获取所有行。
- 接下来,我们创建命令对象,该对象用于对数据库执行 SQL 语句。在 SQL 命令中,您必须传入连接对象和 SQL 字符串。
- 接下来,我们将执行数据读取器命令,该命令将从 demotb 表中获取所有行。
- 现在我们有了表的所有行,我们需要一种机制来逐行访问。为此,我们将使用 while 语句。while 语句将用于一次访问数据读取器中的行。然后我们使用 GetValue 方法获取 TutorialID 和 TutorialName 的值。
步骤 2)在最后一步,我们将仅向用户显示输出,并关闭与数据库操作相关的所有对象。
代码解释:
- 我们将通过使用 MessageBox 显示 Output 变量的值来继续我们的代码。Output 变量将包含 demotb 表中的所有值。
- 我们最后关闭所有与数据库操作相关的对象。请记住,这始终是一个好习惯。
设置上述代码并使用 Visual Studio 运行项目后,您将看到以下输出。显示窗体后,单击 Connect 按钮。
输出:-
从输出中,您清楚地可以看到程序能够从数据库中获取值。然后数据显示在消息框中。
C# 插入数据库
就像访问数据一样,C# 也有能力将记录插入数据库。为了展示如何将记录插入数据库,让我们采用上面使用的相同的表结构。
TutorialID | TutorialName |
---|---|
1 | C# |
2 | ASP.Net |
让我们更改窗体中的代码,以便将以下行插入到表中:
TutorialID | TutorialName |
---|---|
3 | VB.Net |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于插入数据库中的现有记录。
代码解释:
- 第一步是创建以下变量:
- SQLCommand – 此数据类型用于定义用于对数据库执行 SQL 操作的对象。此对象将保存将在我们的 SQL Server 数据库上运行的 SQL 命令。
- DataAdapter 对象用于执行特定的 SQL 操作,例如插入、删除和更新命令。
- 然后我们定义一个字符串变量,即“SQL”,用于保存我们的 SQL 命令字符串。
- 下一步是实际定义将用于我们数据库的 SQL 语句。在我们的例子中,我们正在发出一个 insert 语句,它将插入 TutorialID=1 和 TutorialName=VB.Net 的记录。
- 接下来,我们创建命令对象,该对象用于对数据库执行 SQL 语句。在 SQL 命令中,您必须传入连接对象和 SQL 字符串。
- 在我们的数据适配器命令中,我们将插入 SQL 命令关联到我们的适配器。我们还执行 ExecuteNonQuery 方法,该方法用于对我们的数据库执行 Insert 语句。“ExecuteNonQuery”方法在 C# 中用于对数据库发出任何 DML 语句。DML 语句是指插入、删除和更新操作。在 C# 中,如果您想对表发出任何这些语句,则需要使用 ExecuteNonQuery 方法。
- 我们最后关闭所有与数据库操作相关的对象。请记住,这始终是一个好习惯。
设置上述代码并使用 Visual Studio 执行项目后,您将看到以下输出。显示窗体后,单击 Connect 按钮。
输出:-
如果转到 SQL Server Express 并查看 demotb 表中的行,您将看到插入的行如下所示:
C# 更新数据库
就像访问数据一样,C# 也有能力更新数据库中的现有记录。为了展示如何将记录更新到数据库,让我们采用上面使用的相同的表结构。
TutorialID | TutorialName |
---|---|
1 | C# |
2 | ASP.Net |
3 | VB.Net |
让我们更改窗体中的代码,以便我们可以更新以下行。旧行的 TutorialID 值为“3”,Tutorial Name 为“VB.Net”。我们将将其更新为“VB.Net complete”,而 Tutorial ID 的行值将保持不变。
旧行
TutorialID | TutorialName |
---|---|
3 | VB.Net |
新行
TutorialID | TutorialName |
---|---|
3 | VB.Net complete |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于更新数据库中的现有记录。
C# SqlCommand 示例及代码说明:
- 第一步是创建以下变量:
- SQLCommand – 此数据类型用于定义用于对数据库执行 SQL 操作的对象。此对象将保存将在我们的 SQL Server 数据库上运行的 SQL 命令。
- DataAdapter 对象用于执行特定的 SQL 操作,例如插入、删除和更新命令。
- 然后我们定义一个字符串变量,即 SQL,用于保存我们的 SQL 命令字符串。
- 下一步是定义将用于我们数据库的 SQL 语句。在我们的例子中,我们正在发出一个 update 语句,它将 Tutorial 名称更新为“VB.Net Complete”,而 TutorialID 保持不变,仍为 3。
- 接下来,我们将创建命令对象,该对象用于对数据库执行 SQL 语句。在 SQL 命令中,您已传入连接对象和 SQL 字符串。
- 在我们的数据适配器命令中,我们将插入 SQL 命令关联到我们的适配器。我们还执行 ExecuteNonQuery 方法,该方法用于对我们的数据库执行 Update 语句。
- 我们最后关闭所有与数据库操作相关的对象。请记住,这始终是一个好习惯。
设置上述代码并使用 Visual Studio 执行项目后,您将看到以下输出。显示窗体后,单击 Connect 按钮。
输出:-
如果您实际上转到 SQL Server Express 并查看 demotb 表中的行,您将看到行已成功更新,如下所示。
删除记录
就像访问数据一样,C# 也有能力删除数据库中的现有记录。为了展示如何将记录删除到数据库中,让我们采用上面使用的相同的表结构。
TutorialID | TutorialName |
---|---|
1 | C# |
2 | ASP.Net |
3 | VB.Net complete |
让我们更改窗体中的代码,以便我们可以删除以下行:
TutorialID | TutorialName |
---|---|
3 | VB.Net complete |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于删除数据库中的现有记录。
代码解释:
- 此代码的关键区别在于,我们现在正在发出 delete SQL 语句。delete 语句用于删除 demotb 表中 TutorialID 值为 3 的行。
- 在我们的数据适配器命令中,我们将插入 SQL 命令关联到我们的适配器。我们还执行 ExecuteNonQuery 方法,该方法用于对我们的数据库执行 Delete 语句。
设置上述代码并使用 Visual Studio 执行项目后,您将看到以下输出。显示窗体后,单击 Connect 按钮。
输出:-
如果您实际上转到 SQL Server Express 并查看 demotb 表中的行,您将看到该行已成功删除,如下所示。
将控件连接到数据
在前面的章节中,我们已经看到了如何使用 C# 命令,如 SQLCommand 和 SQLReader 从数据库中获取数据。我们还看到了如何读取表的每一行,并使用消息框向用户显示表的内容。
但用户显然不希望通过消息框发送数据,而是希望有更好的控件来显示数据。让我们来看一个表中的以下数据结构:
TutorialID | TutorialName |
---|---|
1 | C# |
2 | ASP.Net |
3 | VB.Net complete |
从上述数据结构中,用户理想情况下希望在文本框中看到 TutorialID 和 Tutorial Name。其次,他们可能希望有一种按钮控件,允许他们转到表中的下一条记录或上一条记录。这需要开发人员进行一些额外的编码。
好消息是,C# 可以通过允许控件绑定到数据来减少额外的编码工作。这意味着 C# 可以根据表中的特定字段自动填充文本框的值。
因此,您可以在 Windows 窗体中有 2 个文本框。然后您可以将一个文本框链接到 TutorialID 字段,另一个文本框链接到 TutorialName 字段。这种链接是在 Visual Studio 设计器本身完成的,您不需要为此编写额外的代码。
Visual Studio 将确保它为您编写代码以确保链接正常工作。然后,当您运行应用程序时,文本框控件将自动连接到数据库,获取数据并显示在文本框控件中。开发人员无需编写任何代码即可实现此目的。
让我们看一个代码示例,说明如何实现控件绑定。
在我们的示例中,我们将在 Windows 窗体上创建 2 个文本框。它们将分别代表 Tutorial ID 和 Tutorial Name。它们将相应地绑定到数据库的 Tutorial ID 和 TutorialName 字段。
让我们按照以下步骤来实现这一点:
步骤 1)构建基本窗体。在窗体中,拖放 2 个组件——标签和文本框。然后执行以下子步骤:
- 将第一个标签的文本值设置为 TutorialID
- 将第二个标签的文本值设置为 TutorialName
- 将第一个文本框的名称属性设置为 txtID
- 将第二个文本框的名称属性设置为 txtName
执行上述步骤后,窗体外观如下:
步骤 2)下一步是向窗体添加一个绑定导航器。绑定导航器控件可以自动在表的每一行中导航。要添加绑定导航器,只需从工具箱中拖动到窗体。
步骤 3)下一步是向我们的数据库添加绑定。这可以通过转到任何一个文本框控件并单击 DataBindings->Text 属性来完成。绑定导航器用于在您的应用程序和数据库之间建立链接。
执行此步骤时,Visual Studio 将自动添加所需的代码到应用程序中,以确保应用程序链接到数据库。通常,Visual Studio 中的数据库被称为项目数据源。因此,为确保应用程序和数据库之间的连接已建立,第一步是创建项目数据源。
将显示以下屏幕。单击链接——“添加项目数据源”。单击项目数据源后,将出现一个向导;这将允许您定义数据库连接。
步骤 4)单击添加项目数据源链接后,将出现一个向导,用于创建到 demotb 数据库的连接。以下步骤详细说明了在向导的每个步骤中需要配置的内容。
- 在弹出的屏幕中,选择数据源类型为数据库,然后单击下一步按钮。
- 在下一个屏幕中,您需要开始创建到数据库的连接字符串。应用程序需要连接字符串来建立到数据库的连接。它包含服务器名称、数据库名称和驱动程序名称等参数。
- 单击新建连接按钮。
- 选择数据源为 Microsoft SQL Server。
- 单击继续按钮。
- 接下来,您需要添加连接到数据库的凭据。
- 选择 SQL Server 所在的服务器名称。
- 输入用户 ID 和密码以连接到数据库。
- 选择数据库为 demotb。
- 单击“确定”按钮。
- 在此屏幕中,我们将确认在上一个屏幕中执行的所有设置。
- 选择“是”选项以在连接字符串中包含敏感数据。
- 单击“下一步”按钮。
- 在下一个屏幕中,单击“下一步”按钮以确认连接字符串的创建。
- 在此步骤中,
- 选择 Demotb 的表,这些表将在下一个屏幕中显示。
- 此表现在将成为 C# 项目中可用的数据源。
单击 Finish 按钮后,Visual Studio 将确保应用程序可以查询 Demotb 表中的所有行。
步骤 5)现在已经定义了数据源,我们需要将 TutorialID 和 TutorialName 文本框连接到 demotb 表。当您单击 TutorialID 或 TutorialName 文本框的 Text 属性时,您将看到 Demotb 的绑定源可用。
对于第一个文本框,选择 Tutorial ID。对第二个文本框重复此步骤,并将字段选择为 TutorialName。以下步骤显示了如何导航到每个控件并相应地更改绑定。
- 单击 Tutorial ID 控件。
- 在 Properties 窗口中,您将看到 TutorialID 文本框的属性。转到 text 属性并单击向下箭头按钮。
- 单击向下箭头按钮后,您将看到 demotbBinding Source 选项。在该选项下,您将看到 TutorialName 和 TutorialID 选项。选择 Tutorial ID 选项。
对 Tutorial Name 文本框重复上述 3 个步骤。
- 因此,单击 Tutorial Name 文本框。
- 转到属性窗口。
- 选择 Text 属性。
- 在 demotbBindingSource 下选择 TutorialName 选项。
步骤 6)接下来,我们需要更改 BindingNavigator 的 Binding Source 属性,使其指向我们的 Demotb 数据源。我们这样做是因为 Binding Navigator 也需要知道它需要引用哪个表。
Binding Navigator 用于选择表中的下一个或上一个记录。因此,即使数据源作为整体添加到项目和文本框控件中,我们仍然需要确保 Binding Navigator 也与我们的数据源建立链接。为此,我们需要单击 Binding navigator 对象,转到 Binding Source 属性,然后选择可用的选项。
接下来,我们需要转到 Properties 窗口,以便我们可以更改 Binding Source 属性。
当所有上述步骤都成功执行后,您将看到以下输出。
输出:-
现在当项目启动时,您可以看到文本框自动获取表中的值。
当您单击 Navigator 上的 Next 按钮时,它会自动转到表中的下一条记录。下一条记录的值会自动显示在文本框中。
C# DataGridView
数据网格用于以网格状格式显示表中的数据。当用户看到表数据时,他们通常希望一次性看到所有表行。如果我们可以在窗体上以网格形式显示数据,就可以实现这一点。
C# 和 Visual Studio 具有内置的数据网格,可用于显示数据。让我们看一个例子。在我们的示例中,我们将有一个数据网格,用于显示 demotb 表中的 Tutorial ID 和 Tutorial Name 值。
步骤 1)从工具箱将 DataGridView 控件拖到 Visual Studio 中的窗体上。DataGridView 控件在 Visual Studio 中用于以网格状格式显示表中的行。
步骤 2)下一步,我们需要将数据网格连接到数据库。在上一节中,我们创建了一个项目数据源。让我们在示例中使用相同的数据源。
- 首先,您需要选择网格并单击网格中的箭头。这将显示网格配置选项。
- 在配置选项中,只需将数据源选择为 earlier section 中创建的数据源 demotbBindingSource。
如果所有上述步骤都按所示执行,您将看到以下输出。
输出:-
从输出中,您可以看到网格已由数据库中的值填充。
摘要
- C# SQL 可以处理 Oracle 和 Microsoft SQL Server 等数据库。
- 这个 C# 数据库教程包含了处理数据库所需的所有命令。这包括建立数据库连接。您可以使用 C# 中的命令执行 select、update、insert 和 delete 等操作。
- C# 中的 DataReader 对象用于保存数据库返回的所有数据。C# 中的 While 循环可用于一次读取一行数据。
- DataAdapter 对象用于执行 SQL 操作,例如对数据库进行插入、删除和更新。
- C# 可以将控件绑定到表中的各种字段。它们通过在 C# 中定义数据源进行绑定。数据源用于从数据库拉取数据并填充到控件中。
- Binding navigator 用于在表中自动导航行。
- C# 中的数据网格可以连接到数据库,并以网格状格式显示表中的所有值。