概述
上节《C#+ADO.NET读取MSSQL Server数据库中的数据》中,我们学习了在C#控制台应用程序中通过ADO.NET读取MSSQL Server数据库中数据的两种主要方式,分别是:通过DataReader读取和通过DataSet读取。
本节我们继续《C#+ADO.NET数据库入门教程》系列之《C#+ADO.NET实现对SQL Server数据库的写入、更新、删除数据操作》,一起学习在C#+.NET 5控制台应用程序中完成对SQL Server数据库的写入(增)、更新(改)、删除(删)基本操作。
Command对象
在C#应用程序中,要使用ADO.NET将数据写入SQL Server数据库,需要用到Command
的SQL实现,即SqlCommand
对象。Command
对象是使用ADO.NET进行数据处理的核心。一个Command
实例对象包含了一条(多条)SQL语句或一个存储过程的调用,比如,你可以使用Command
对象去执行包含INSERT
, UPDATE
, DELETE
或者SELECT
的SQL语句。要vtf的语句均存放在Command
实例对象的数据类型为字符串的CommandText
属性中。
SqlCommand
类提供了4个构造函数,如下:
从上图看出,实例化一个用于操作SQL Server数据库的SqlCommand
对象,可以使用默认构造函数,也可以传入有参的构造函数,比如SQL语句字符串、数据库连接对象、SQL事务对象等,示例如下:
using System;
using System.Data.SqlClient;
namespace ConsoleApp1
{
class Program
{
// 定义一个私有字段,存储数据库连接字符串信息(这里连接的是mssqllocaldb数据库,登录方式为Windows身份验证)
private const string _connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
static void Main(string[] args)
{
// 1.实例化一个SQL Server的连接对象(这里使用using语句块,以自动释放连接资源)
using SqlConnection connection = new SqlConnection(_connectionString);
// 2.实例化一个SqlCommand对象
var command = new SqlCommand("",connection);
}
}
}
如果实例化
SqlCommand
对象时未指定CommandText
参数,则要在实例对象上显式指定CommandText
的值。
SqlCommand
实例还提供了三个执行SQL语句的方法,分别为:ExecuteNonQuery, ExecuteReader, ExecuteScalar,其中:
- ExecuteNonQuery:执行一个SQL语句并返回影响的行数
- ExecuteReader:创建一个SqlDataReader对象
- ExecuteScalar:执行一个SQL查询并返回结果集中第一行第一列的值,其他值将被忽略
使用ADO.NET将数据写入SQL Server数据库
在熟悉了SqlCommand
对象之后,我们使用SqlCommand
将数据写入SQL Server数据库,示例如下:
using System;
using System.Data.SqlClient;
namespace ConsoleApp1
{
class Program
{
// 定义一个私有字段,存储数据库连接字符串信息(这里连接的是mssqllocaldb数据库,登录方式为Windows身份验证)
private const string _connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
static void Main(string[] args)
{
// 1.实例化一个SQL Server的连接对象(这里使用using语句块,以自动释放连接资源)
using SqlConnection connection = new SqlConnection(_connectionString);
// 2.编写写入数据的SQL语句
var commandText = "INSERT INTO Customer (FamilyName,GivenName,Email,Gender,IpAddress,CreatedAt) VALUES ('刘','先生','abc@example.com','男','127.0.0.1','2021-10-11 14:00:00')";
// 3.实例化一个SqlCommand对象
var command = new SqlCommand(commandText, connection);
// 4.打开数据库连接
connection.Open();
// 5.调用ExecuteNonQuery()方法,执行SQL语句,变量i表示SQL语句执行影响的行数
var i = command.ExecuteNonQuery();
Console.WriteLine($"影响行数:{i}");
// 6.如果影响行数大于0,表示数据写入成功
if (i > 0)
{
Console.WriteLine("数据写入成功");
}
else
{
Console.WriteLine("数据写入失败");
}
// 通常需调用connection.Close();方法关闭数据库连接
// 但上面使用了using关键字,所以此处无需手动关闭(connection作用域结束时,会自动释放connection资源)
Console.ReadKey();
}
}
}
程序运行结果为:
影响行数:1
数据写入成功
打开SQL Server数据库查看结果,如图:
可以看到,在SQL Server数据库的Customer表中,ID为1001
的记录即为上面程序成功写入的数据。
使用ADO.NET更新SQL Server数据库的数据
与写入数据类似,使用ADO.NET更新SQL Server数据库的数据也要使用SqlCommand
对象,只是CommandText
的SQL语句不同而已。
现在,我们来更新刚才写入的ID为1001
的数据,将GivenName
的值修改为老师
,Email
修改为rector@codedefault.com
,示例代码如下:
using System;
using System.Data.SqlClient;
namespace ConsoleApp1
{
class Program
{
// 定义一个私有字段,存储数据库连接字符串信息(这里连接的是mssqllocaldb数据库,登录方式为Windows身份验证)
private const string _connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
static void Main(string[] args)
{
// 1.实例化一个SQL Server的连接对象(这里使用using语句块,以自动释放连接资源)
using SqlConnection connection = new SqlConnection(_connectionString);
// 2.编写写入数据的SQL语句
var commandText = "UPDATE Customer SET GivenName='老师',Email='rector@codedefault.com' WHERE Id=1001";
// 3.实例化一个SqlCommand对象
var command = new SqlCommand(commandText, connection);
// 4.打开数据库连接
connection.Open();
// 5.调用ExecuteNonQuery()方法,执行SQL语句,变量i表示SQL语句执行影响的行数
var i = command.ExecuteNonQuery();
Console.WriteLine($"影响行数:{i}");
// 6.如果影响行数大于0,表示数据写入成功
if (i > 0)
{
Console.WriteLine("数据更新成功");
}
else
{
Console.WriteLine("数据更新失败");
}
// 通常需调用connection.Close();方法关闭数据库连接
// 但上面使用了using关键字,所以此处无需手动关闭(connection作用域结束时,会自动释放connection资源)
Console.ReadKey();
}
}
}
运行结果为:
影响行数:1
数据更新成功
再次查看SQL Server数据库Customer表中的数据,如下:
说明,C#程序中使用ADO.NET更新SQL Server数据库记录成功。
使用ADO.NET删除SQL Server数据库的数据
同样的,C#程序中使用ADO.NET删除SQL Server数据库指定数据的方法也是通过SqlCommand
对象执行SQL语句来完成的,只需将CommandText
的SQL语句修改成SQL的删除语句即可,示例代码如下:
using System;
using System.Data.SqlClient;
namespace ConsoleApp1
{
class Program
{
// 定义一个私有字段,存储数据库连接字符串信息(这里连接的是mssqllocaldb数据库,登录方式为Windows身份验证)
private const string _connectionString = "Server=(localdb)\\mssqllocaldb;Integrated Security=true;Database=Demo";
static void Main(string[] args)
{
// 1.实例化一个SQL Server的连接对象(这里使用using语句块,以自动释放连接资源)
using SqlConnection connection = new SqlConnection(_connectionString);
// 2.编写写入数据的SQL语句
var commandText = "DELETE FROM Customer WHERE Id=1001";
// 3.实例化一个SqlCommand对象
var command = new SqlCommand(commandText, connection);
// 4.打开数据库连接
connection.Open();
// 5.调用ExecuteNonQuery()方法,执行SQL语句,变量i表示SQL语句执行影响的行数
var i = command.ExecuteNonQuery();
Console.WriteLine($"影响行数:{i}");
// 6.如果影响行数大于0,表示数据写入成功
if (i > 0)
{
Console.WriteLine("数据删除成功");
}
else
{
Console.WriteLine("数据删除失败");
}
// 通常需调用connection.Close();方法关闭数据库连接
// 但上面使用了using关键字,所以此处无需手动关闭(connection作用域结束时,会自动释放connection资源)
Console.ReadKey();
}
}
}
运行结果为:
影响行数:1
数据删除成功
请自行打开SQL Server数据查看Id为1001
的记录是否还存在于数据表Customer中。
特别注意:在编写SQL的更新和删除语句时,请一定注意SQL的WHERE条件,条件错误将导致数据更新错乱或误删数据等严重后果。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册