ADO.NET命令执行与数据操作全解析
立即解锁
发布时间: 2025-08-20 01:14:35 阅读量: 1 订阅数: 3 


C# 5.0与SQL Server 2012数据库开发实战
### ADO.NET 命令执行与数据操作全解析
在进行数据库操作时,我们常常会用到 ADO.NET 来执行各种 SQL 命令以实现数据的查询、插入、更新和删除等操作。接下来,我们将详细探讨如何使用 ADO.NET 执行不同类型的命令,以及如何处理常见的问题。
#### 1. 使用 ExecuteScalar 方法的注意事项
在使用 `ExecuteScalar` 方法时,需要注意两个问题。一是类型转换问题,因为不能将字符串直接转换为整数。二是查询结果行数的问题,如果查询实际返回多行数据,而你原本以为只会返回一行,那么 `ExecuteScalar` 方法只会返回结果的第一行,而忽略其余行。所以,使用 `ExecuteScalar` 方法时,要确保期望并实际得到单个值的返回。
#### 2. 执行返回多结果的命令
当期望查询返回多行多列数据时,可以使用命令的 `ExecuteReader` 方法。该方法会返回一个数据读取器,即 `SqlDataReader` 类的实例。数据读取器有一些方法,可用于读取结果集中的连续行并检索单个列的值。
##### 2.1 使用 ExecuteReader 方法的步骤
1. 选择 ADO.NET_Command 项目,右键单击,选择“添加” -> “Windows 窗体”。在打开的对话框中,确保选择“Windows 窗体”,并将 Form1.cs 重命名为 CommandReader.cs,点击“确定”将此窗体添加到 ADO.NET_Command 项目中。
2. 点击 CommandReader 窗体的标题栏选中该窗体,将“Size”属性的“Width”设置为 455,“Height”设置为 283。
3. 将一个 TextBox 控件拖到窗体上。选中此 TextBox 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 txtReader。
- 将“Location”属性的“X”设置为 12,“Y”设置为 12。
- 将“Multiline”属性设置为 True。
- 将“ScrollBars”属性设置为 Vertical。
- 将“Size”属性的“Width”设置为 415,“Height”设置为 223。
- 留空“Text”属性。
4. 现在,CommandReader 窗体的设计视图应类似于图 13 - 5。
5. 双击 CommandReader.cs 窗体的空白区域,将打开代码编辑器窗口,显示 CommandReader_Load 事件。将 CommandReader_Load 事件修改为如下代码:
```csharp
Using System.Data.SqlClient;
private void CommandReader_Load(object sender, EventArgs e)
{
// Create connection
SqlConnection conn = new SqlConnection(@"
server = .\sql2012;
integrated security = true;
database = AdventureWorks");
// Create command
string sql = @"select Name,ProductNumber
from Production.Product";
SqlCommand cmd = new SqlCommand(sql, conn);
txtReader.AppendText("Command created and connected.\n\n");
try
{
// Open connection
conn.Open();
// Execute query via ExecuteReader
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
txtReader.AppendText("\nProduct: ");
txtReader.AppendText(rdr.GetValue(1) + "\t\t" + rdr.GetValue(0));
txtReader.AppendText("\n");
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message + ex.StackTrace, "Exception Details");
}
finally
{
conn.Close();
txtReader.AppendText("Connection Closed.");
}
}
```
6. 要将 CommandReader 窗体设置为启动窗体,修改 Program.cs 语句:
```csharp
Application.Run(new CommandScalar ());
```
为:
```csharp
Application.Run(new CommandReader());
```
构建项目,然后按 Ctrl + F5 运行。
7. 当窗体加载时,结果应类似于图 13 - 6。
##### 2.2 ExecuteReader 方法的工作原理
在这个示例中,使用 `ExecuteReader` 方法检索并输出 Production.Product 表中所有产品的 Name 和 ProductNumber 值。与 `ExecuteScalar` 方法一样,`ExecuteReader` 方法会获取 CommandText 属性,并使用 Connection 属性中的连接将其发送到数据库。当使用 `ExecuteScalar` 方法时,只会产生单个标量值;而使用 `ExecuteReader` 方法会返回一个 SqlDataReader 对象。SqlDataReader 对象有一个 `Read` 方法,用于依次获取每一行,还有一个 `GetValue` 方法,用于获取行中某一列的值。要检索其值的特定列由表示列索引的整数参数指定。请注意,`GetValue` 使用从零开始的索引,因此第一列是列 0,第二列是列 1,依此类推。由于查询请求了两列(Name 和 ProductNumber),因此在这个查询结果中,这两列的编号分别为 0 和 1。
#### 3. 执行非查询语句
`ExecuteNonQuery` 方法用于执行由 DML 语句组成的 SQL 语句,这些语句包括 SQL Server 的 INSERT、UPDATE 和 DELETE 功能。因此,`ExecuteNonQuery` 方法用于将 DML 语句提供给命令并执行它。如之前所注意到的,INSERT、UPDATE 和 DELETE 语句不会返回任何记录。
##### 3.1 使用 ExecuteNonQuery 方法的步骤
1. 选择 ADO.NET_Command 项目,右键单击,选择“添加” -> “Windows 窗体”。在打开的对话框中,确保选择“Windows 窗体”,并将 Form1.cs 重命名为 CommandNonQuery.cs,点击“确定”将此窗体添加到 ADO.NET_Command 项目中。
2. 点击 CommandNonQuery 窗体的标题栏选中该窗体,将“Size”属性的“Width”设置为 297,“Height”设置为 277。
3. 将一个 GroupBox 控件拖到窗体上,并将其定位到窗体左侧。选中此 GroupBox 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 gbInsertCurrency。
- 将“Location”属性的“X”设置为 21,“Y”设置为 22。
- 将“Size”属性的“Width”设置为 240,“Height”设置为 201。
- 将“Text”属性设置为“Insert Currency”。
4. 将一个 Label 控件拖到名为 gbInsertCurrency 的 GroupBox 中,并将其定位到 GroupBox 左侧。选中此 Label 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 lblCurrencyCode。
- 将“Location”属性的“X”设置为 16,“Y”设置为 30。
- 将“Size”属性的“Width”设置为 77,“Height”设置为 13。
- 将“Text”属性设置为“Currency Code”。
5. 将一个 TextBox 控件拖到窗体上,并将其定位到名为“Currency Code”的 Label 控件旁边。选中此 TextBox 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 txtCurrencyCode。
- 将“Location”属性的“X”设置为 99,“Y”设置为 30。
- 将“Size”属性的“Width”设置为 128,“Height”设置为 20。
- 留空“Text”属性。
6. 将另一个 Label 控件拖到名为 gbInsertCurrency 的 GroupBox 中,并将其定位到“Currency Code”标签下方、GroupBox 左侧。选中此 Label 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 lblName。
- 将“Location”属性的“X”设置为 19,“Y”设置为 64。
- 将“Size”属性的“Width”设置为 35,“Height”设置为 13。
- 将“Text”属性设置为“Name”。
7. 将一个 TextBox 控件拖到窗体上,并将其定位到名为“Name”的 Label 控件旁边。选中此 TextBox 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 txtName。
- 将“Location”属性的“X”设置为 99,“Y”设置为 64。
- 将“Size”属性的“Width”设置为 128,“Height”设置为 20。
- 留空“Text”属性。
8. 此时,CommandNonQuery 窗体的设计视图应类似于图 13 - 7。
9. 继续进行窗体设计,将另一个 Label 控件拖到名为 gbInsertCurrency 的 GroupBox 上,并将其定位到“Name”标签下方、GroupBox 左侧。选中此 Label 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 lblModifiedDate。
- 将“Location”属性的“X”设置为 19,“Y”设置为 97。
- 将“Size”属性的“Width”设置为 73,“Height”设置为 13。
- 将“Text”属性设置为“Modified Date”。
10. 将一个 DateTimePicker 控件拖到窗体上,并将其定位到“Modified Date”标签控件旁边。选中此 DateTimePicker 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 dtpModifiedDate。
- 将“Format”属性设置为“Short”。
- 将“Location”属性的“X”设置为 99,“Y”设置为 97。
- 将“Size”属性的“Width”设置为 128,“Height”设置为 20。
11. 将一个 Button 控件拖到名为 gbInsertCurrency 的 GroupBox 中,并将其定位到 Label 和 TextBox 控件下方。选中此 Button 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 btnInsertCurrency。
- 将“Location”属性的“X”设置为 56,“Y”设置为 133。
- 将“Size”属性的“Width”设置为 128,“Height”设置为 23。
- 将“Text”属性设置为“Insert Currency”。
12. 将另一个 Label 控件拖到名为 gbInsertCurrency 的 GroupBox 中,并将其定位到“Insert Currency”按钮下方。选中此 Label 控件,导航到“属性”窗口,设置以下属性:
- 将“Name”属性设置为 lblInsertStatus。
- 将“AutoSize”属性设置为 False。
- 将“Location”属性的“X”设置为 22,“Y”设置为 168。
- 将“Size”属性的“Width”设置为 205,“Height”设置为 21。
13. 现在,CommandNonQuery 窗体的设计视图应类似于图 13 - 8。
14. 双击“Insert Currency”按钮,将打开代码编辑器窗口,显示 btnInsertCurrency_Click 事件。将 btnInsertCurrency_Click 事件修改为如下代码:
```csharp
Using System.Data.SqlClient;
private void btnInsertCurrency_Click(object sender, EventArgs e)
{
// Create connection
SqlConnection conn = new SqlConnection(@"server = .\
```
0
0
复制全文
相关推荐










