首页 / 教程列表 / C#+ADO.NET数据库入门教程 / C#+ADO.NET实现对SQL Server数据库的写入、更新、删除数据操作

C#+ADO.NET实现对SQL Server数据库的写入、更新、删除数据操作

2104 更新于: 2021-10-11 读完约需 5 分钟

概述

上节《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条件,条件错误将导致数据更新错乱或误删数据等严重后果。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

发表评论

登录用户才能发表评论, 请 登 录 或者 注册