C# 数据库连接:如何连接 SQL Server(示例)
它可以与不同类型的数据库一起使用。它可以与最常见的数据库一起使用,例如 Oracle 和 Microsoft SQL 服务器。
它还可以与新形式的数据库一起使用,例如 MongoDB 和 MySQL.
数据库连接基础知识
C# 和 .Net 可以与大多数数据库一起使用,最常见的是 Oracle 和 Microsoft SQL Server。但对于每个数据库来说,其背后的操作逻辑大致相同。
在我们的示例中,我们将研究如何 Microsoft SQL Server 作为我们的数据库。出于学习目的,您可以下载并使用 Microsoft SQL Server 速成版,这是由 Microsoft.
在使用数据库时,以下是所有数据库所共有的概念。
- 连接升级包 – 要使用数据库中的数据,显然第一步就是连接。数据库连接通常由以下参数组成。
- 数据库名称或数据源 – 第一个重要参数是需要建立连接的数据库名称。每个连接一次只能与一个数据库一起工作。
- 资历 – 下一个重要方面是建立数据库连接所需的用户名和密码。它确保用户名和密码具有连接数据库所需的权限。
- 可选参数 – 对于每种数据库类型,您可以指定可选参数,以提供有关 .net 应如何处理与数据库的连接的更多信息。例如,可以指定一个参数来指示连接应保持活动状态的时间。如果在特定时间段内未执行任何操作,则该参数将确定是否必须关闭连接。
- 从数据库中选择数据 – 建立连接后,下一个重要方面是从数据库中提取数据。C# 可以对数据库执行“SQL”选择命令。“SQL”语句可用于从数据库中的特定表中提取数据。
- 将数据插入数据库 – C# 也可用于将记录插入数据库。可以使用 C# 为需要插入数据库的每一行指定值。
- 将数据更新到数据库中 – C# 还可用于将现有记录更新到数据库中。可以使用 C# 为需要更新到数据库中的每一行指定新值。
- 从数据库中删除数据 – C# 还可用于将记录删除到数据库中。可以在 C# 中指定 Select 命令来指定需要删除哪些行。
好的,现在我们已经了解了每个操作的理论,让我们跳到后续部分来了解如何在 C# 中执行数据库操作。
C# 中的 SQL 命令
C# 中的 SqlCommand 允许用户查询并将命令发送到数据库。SQL 命令由 SQL 连接对象指定。使用两种方法,ExecuteReader 方法用于查询结果,ExecuteNonQuery 方法用于插入、更新和删除命令。它是最适合不同命令的方法。
如何将 C# 连接到数据库
现在让我们看一下需要保留的代码以创建与数据库的连接。在我们的示例中,我们将连接到名为 Demodb 的数据库。用于连接数据库的凭据如下所示
- 用户名 – sa
- 密码 – demo123
我们将看到一个简单的 Windows 表格申请 使用数据库。我们将有一个名为“连接”的简单按钮,用于连接数据库。
因此,让我们按照以下步骤实现此目标
步骤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# 理解连接字符串。连接字符串由以下部分组成
- 数据源 – 这是数据库所在服务器的名称。在我们的例子中,它位于一台名为 WIN-50GP30FGO75 的机器上。
- 初始目录用于指定数据库的名称
- 用户 ID 和密码是连接数据库所需的凭证。
- 接下来,我们将连接字符串分配给变量 cnn。变量 cnn 为 SqlConnection 类型,用于建立与数据库的连接。
- 接下来,我们使用 cnn 变量的 Open 方法打开与数据库的连接。然后我们只需向用户显示一条消息,告知其连接已建立。
- 一旦操作成功完成,我们就会关闭与数据库的连接。如果不需要对数据库进行其他操作,关闭与数据库的连接始终是一个好习惯。
设置完上述代码后,使用 Visual Studio 执行项目,您将获得以下输出。显示表单后,单击“连接”按钮。
输出:-
单击“连接”按钮后,从输出中可以看到数据库连接已建立。因此,显示了消息框。
使用 SqlDataReader 访问数据
为了展示如何使用 C# 访问数据,我们假设我们的数据库中有以下工件。
- 一个名为 demotb 的表。此表将用于存储各种教程的 ID 和名称。
- 该表将有 2 列,一列称为“TutorialID”,另一列称为“TutorialName”。
- 目前,表格将有 2 行,如下所示。
教程编号 | 教程名称 |
---|---|
1 | C# |
2 | 网络 |
让我们更改表单中的代码,以便我们可以查询这些数据并通过消息框显示信息。请注意,下面输入的所有代码都是上一节中为数据连接编写的代码的延续。
步骤1) 我们将代码分成两部分,以便用户更容易理解。
- 首先要构建我们的“select”语句,它将用于从数据库中读取数据。
- 然后,我们将对数据库执行“select”语句并相应地获取所有表行。
代码说明:-
- 第一步是创建以下变量
- SQLCommand – “SQLCommand” 是 C# 中定义的一个类。该类用于执行读取和写入数据库的操作。因此,第一步是确保我们创建该类的变量类型。然后,该变量将在从数据库读取数据的后续步骤中使用。
- DataReader 对象用于获取 SQL 查询指定的所有数据。然后我们可以使用数据读取器逐一读取所有表行。
- 然后我们定义 2 个字符串变量,一个是“SQL”,用于保存 SQL 命令字符串。下一个是“Output”,它将包含所有表值。
- 下一步是定义将用于数据库的 SQL 语句。在我们的例子中,它是“从 demotb 中选择 TutorialID、TutorialName”。这将从表 demotb 中获取所有行。
- 接下来,我们创建命令对象,用于对数据库执行 SQL 语句。在 SQL 命令中,您必须传递连接对象和 SQL 字符串。
- 接下来,我们将执行数据读取器命令,它将从 demotb 表中获取所有行。
- 现在我们已经拥有了表的所有行,我们需要一种逐行访问行的机制。为此,我们将使用 while 语句。while 语句将用于一次一页地访问数据读取器中的行。然后我们使用 GetValue 方法获取 TutorialID 和 TutorialName 的值。
步骤2) 在最后一步,我们将只向用户显示输出并关闭与数据库操作相关的所有对象。
代码说明:-
- 我们将继续我们的代码,通过使用消息显示输出变量的值Box。输出变量将包含 demotb 表中的所有值。
- 最后,我们关闭与数据库操作相关的所有对象。请记住,这始终是一个好习惯。
设置完上述代码后,使用 Visual Studio 运行项目,您将获得以下输出。显示表单后,单击“连接”按钮。
输出:-
从输出中,您可以清楚地看到程序能够从数据库中获取值。然后数据显示在消息框中。
C# 插入数据库
就像访问数据一样,C# 也能够将记录插入数据库。为了展示如何将记录插入数据库,让我们采用上面使用的相同表结构。
教程编号 | 教程名称 |
---|---|
1 | C# |
2 | 网络 |
让我们更改表单中的代码,以便我们可以在表中插入以下行
教程编号 | 教程名称 |
---|---|
3 | VB.Net |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于在我们的数据库中插入现有记录。
代码说明:-
- 第一步是创建以下变量
- SQLCommand – 此数据类型用于定义用于对数据库执行 SQL 操作的对象。此对象将保存针对我们的 SQL Server 数据库运行的 SQL 命令。
- DataAdapter 对象用于执行特定的 SQL 操作,例如插入、删除和更新命令。
- 然后我们定义一个字符串变量“SQL”来保存我们的 SQL 命令字符串。
- 下一步是实际定义将用于数据库的 SQL 语句。在我们的例子中,我们发出一个插入语句,它将插入 TutorialID=1 和 TutorialName=VB.Net 的记录
- 接下来,我们创建用于对数据库执行 SQL 语句的命令对象。在 SQL 命令中,您必须传递连接对象和 SQL 字符串
- 在我们的数据适配器命令中,我们现在将插入 SQL 命令关联到我们的适配器。然后,我们还发出 ExecuteNonQuery 方法,该方法用于对我们的数据库执行插入语句。在 C# 中,“ExecuteNonQuery”方法用于对数据库发出任何 DML 语句。DML 语句是指插入、删除和更新操作。在 C# 中,如果您想对表发出任何这些语句,则需要使用 ExecuteNonQuery 方法。
- 最后,我们关闭与数据库操作相关的所有对象。请记住,这始终是一个好习惯。
设置完上述代码后,使用 Visual Studio 执行项目,您将获得以下输出。显示表单后,单击“连接”按钮。
输出:-
如果您转到 SQL Server Express 并查看 demotb 表中的行,您将看到插入的行,如下所示
C# 更新数据库
就像访问数据一样,C# 也能够从数据库中更新现有记录。为了展示如何将记录更新到数据库中,让我们采用上面使用的相同表结构。
教程编号 | 教程名称 |
---|---|
1 | C# |
2 | 网络 |
3 | VB.Net |
让我们更改表单中的代码,以便我们可以更新以下行。旧行值为 TutorialID 为“3”,Tutorial Name 为“VB.Net”。我们将其更新为“VB.Net complete”,而 Tutorial ID 的行值将保持不变。
老排
教程编号 | 教程名称 |
---|---|
3 | VB.Net |
新行
教程编号 | 教程名称 |
---|---|
3 | VB.Net 完整版 |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于更新数据库中的现有记录。
C# SqlCommand 示例及代码说明:-
- 第一步是创建以下变量
- SQLCommand – 此数据类型用于定义用于对数据库执行 SQL 操作的对象。此对象将保存针对我们的 SQL Server 数据库运行的 SQL 命令。
- dataadapter对象用于执行特定的SQL操作,例如插入,删除和更新命令。
- 然后我们定义一个字符串变量,即 SQL,用于保存我们的 SQL 命令字符串。
- 下一步是定义将用于数据库的 SQL 语句。在我们的例子中,我们发出一条更新语句,这将更新教程名称为“VB.Net Complete”,而 TutorialID 保持不变并保持为 3。
- 接下来,我们将创建命令对象,该对象用于对数据库执行 SQL 语句。在 SQL 命令中,您已传递了连接对象和 SQL 字符串。
- 在我们的数据适配器命令中,我们现在将插入 SQL 命令关联到我们的适配器。然后我们还发出 ExecuteNonQuery 方法,该方法用于针对我们的数据库执行 Update 语句。
- 最后,我们关闭与数据库操作相关的所有对象。请记住,这始终是一个好习惯。
设置完上述代码后,使用 Visual Studio 执行项目,您将获得以下输出。显示表单后,单击“连接”按钮。
输出:-
如果您实际转到 SQL Server Express 并查看 demotb 表中的行,您将看到该行已成功更新,如下所示。
删除记录
就像访问数据一样,C# 也可以从数据库中删除现有记录。为了展示如何将记录删除到数据库中,让我们采用上面使用的相同表结构。
教程编号 | 教程名称 |
---|---|
1 | C# |
2 | 网络 |
3 | VB.Net 完整版 |
让我们更改表单中的代码,以便可以删除以下行
教程编号 | 教程名称 |
---|---|
3 | VB.Net 完整版 |
因此,让我们将以下代码添加到我们的程序中。以下代码片段将用于删除数据库中的现有记录。
代码说明:-
- 此代码中的关键区别在于我们现在发出删除 SQL 语句。删除语句用于删除 demotb 表中 TutorialID 值为 3 的行。
- 在我们的数据适配器命令中,我们现在将插入 SQL 命令关联到我们的适配器。然后我们还发出 ExecuteNonQuery 方法,该方法用于针对我们的数据库执行 Delete 语句。
设置完上述代码后,使用 Visual Studio 执行项目,您将获得以下输出。显示表单后,单击“连接”按钮。
输出:-
如果您实际转到 SQL Server Express 并查看 demotb 表中的行,您将看到该行已被成功删除,如下所示。
将控件连接到数据
在前面的部分中,我们已经了解了如何使用 SQLCommand 和 SQLReader 等 C# 命令从数据库中提取数据。我们还了解了如何读取表中的每一行并使用消息框向用户显示表的内容。
但显然,用户不想看到通过消息框发送的数据,并希望有更好的控件来显示数据。让我们以下面的表格形式展示数据结构
教程编号 | 教程名称 |
---|---|
1 | C# |
2 | 网络 |
3 | VB.Net 完整版 |
从上述数据结构来看,用户理想情况下希望看到 TutorialID 和 Tutorial Name 显示在文本框中。其次,他们可能希望有某种按钮控件,可以让他们转到表中的下一个记录或上一个记录。这需要开发人员进行一些额外的编码。
好消息是,C# 可以通过将控件绑定到数据来减少额外的编码工作。这意味着 C# 可以根据表的特定字段自动填充文本框的值。
因此,您可以在 Windows 窗体中拥有 2 个文本框。然后,您可以将一个文本框链接到 TutorialID 字段,将另一个文本框链接到 TutorialName 字段。此链接是在 Visual Studio 设计器本身中完成的,您无需为此编写额外的代码。
Visual Studio 将确保为您编写代码以确保链接有效。然后,当您运行应用程序时,文本框控件将自动连接到数据库,获取数据并将其显示在文本框控件中。开发人员无需编写任何代码即可实现此目的。
让我们看一个代码示例来了解如何实现控件绑定。
在我们的示例中,我们将在 Windows 窗体上创建 2 个文本框。它们分别代表教程 ID 和教程名称。它们将相应地绑定到数据库的教程 ID 和教程名称字段。
让我们按照以下步骤实现这一点。
步骤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# 项目中可用的数据源
单击“完成”按钮后, Visual Studio中 现在将确保应用程序可以查询表 Demotb 中的所有行。
步骤5) 现在数据源已定义,我们现在需要将 TutorialID 和 TutorialName 文本框连接到 demotb 表。当您单击 TutorialID 或 TutorialName 文本框的 Text 属性时,您现在将看到到 Demotb 的绑定源可用。
对于第一个文本框,选择教程 ID。对第二个文本框重复此步骤,并选择字段为 TutorialName。以下步骤显示了如何导航到每个控件并相应地更改绑定。
- 单击教程 ID 控件。
- 在“属性”窗口中,您将看到 TutorialID 文本框的属性。转到文本属性并单击向下箭头按钮。
- 单击向下箭头按钮时,您将看到 demotbBinding Source 选项。在此之下,您将看到 TutorialName 和 TutorialID 选项。选择 Tutorial ID。
对教程名称文本框重复以上 3 个步骤。
- 因此,单击“教程名称”文本框
- 转到属性窗口
- 选择文本属性
- 选择 demotbBindingSource 下的 TutorialName 选项
步骤6) 接下来,我们需要将 BindingNavigator 的 Binding Source 属性更改为指向我们的 Demotb 数据源。我们这样做的原因是 Binding Navigator 还需要知道它需要引用哪个表。
绑定导航器用于选择表中的下一个或上一个记录。因此,即使数据源已添加到整个项目和文本框控件中,我们仍需要确保绑定导航器也具有指向数据源的链接。为此,我们需要单击绑定导航器对象,转到绑定源属性,然后选择可用的绑定源
接下来,我们需要转到“属性”窗口,以便可以更改“绑定源”属性。
当上述所有步骤成功执行后,您将获得下面提到的输出。
输出:-
现在,当项目启动时,您可以看到文本框自动从表中获取值。
单击导航器上的“下一步”按钮时,它会自动转到表中的下一条记录。下一条记录的值会自动出现在文本框中
C# 数据网格视图
数据网格用于以网格状格式显示表格中的数据。当用户看到表格数据时,他们通常希望一次性看到所有表格行。如果我们可以在表单上以网格形式显示数据,就可以实现这一点。
C# 和 Visual Studio 具有内置数据网格,可用于显示数据。让我们来看一个例子。在我们的示例中,我们将有一个数据网格,用于显示 demotb 表中的教程 ID 和教程名称值。
步骤1) 将 DataGridView 控件从工具箱拖到 Visual Studio 中的窗体。DataGridView 控件在 Visual Studio 中用于以网格格式显示表格的行。
步骤2) 下一步,我们需要将数据网格连接到数据库。在上一节中,我们创建了一个项目数据源。让我们在示例中使用相同的数据源。
- 首先,您需要选择网格并单击网格中的箭头。这将调出网格配置选项。
- 在配置选项中,只需选择数据源为 demotbBindingSource,它是前面部分中创建的数据源。
如果按照上述所有步骤执行,您将获得下面提到的输出。
输出:-
从输出中,您可以看到网格是由数据库中的值填充的。
总结
- C# SQL 可以与以下数据库一起使用 Oracle 和 Microsoft SQL Server.
- 本 C# 数据库教程包含使用数据库所需的所有命令。这涉及建立与数据库的连接。您可以使用 C# 中的命令执行选择、更新、插入和删除等操作。
- C# 中的 DataReader 对象用于保存数据库返回的所有数据。C# 中的 While 循环可用于一次读取一行数据。
- 数据适配器对象用于对数据库执行插入、删除和更新等 SQL 操作。
- C# 可以将控件绑定到表中的各个字段。通过在 C# 中定义数据源来绑定它们。数据源用于从数据库中提取数据并将其填充到控件中。
- 绑定导航器用于自动浏览表中的行。
- 数据网格 C# 可以连接到数据库并以网格格式显示表中的所有值。