当前位置:首页 > 行业动态 > 正文

如何用C实例操作数据库?

在C#中,可以使用ADO.NET来连接和操作数据库。使用SqlConnection类连接到SQL Server数据库,并使用SqlCommand类执行SQL查询。

在C#中进行数据库操作通常涉及使用 ADO.NET、Entity Framework 等技术,以下为你介绍一个使用 ADO.NET 连接 SQL Server 数据库并进行基本操作的 C# 实例:

环境搭建

开发工具:Visual Studio 2022 或更高版本。

数据库:SQL Server 2019,安装时选择默认实例,并使用 “Windows 身份验证” 模式。

数据库创建与表设计

在 SQL Server Management Studio 中创建一个简单的数据库和数据表,假设数据库名为 “SchoolDB”,包含一个名为 “Students” 的表,其结构如下:

列名 数据类型 允许空值 主键/外键
StudentID int 主键
Name nvarchar(50)
Age int
Grade nvarchar(10)

创建数据库和表的 SQL 语句如下:

CREATE DATABASE SchoolDB;
GO
USE SchoolDB;
GO
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    Name NVARCHAR(50) NOT NULL,
    Age INT NOT NULL,
    Grade NVARCHAR(10) NOT NULL
);
GO

C# 代码实现

1、添加引用:在 Visual Studio 中创建一个新的 C# 控制台应用程序项目,然后在项目中添加对 “System.Data” 命名空间的引用,该命名空间包含了用于数据库连接和操作的类。

2、连接数据库:编写代码连接到 SQL Server 数据库,需要提供服务器名称、数据库名称、用户名和密码等信息,以下是示例代码:

using System;
using System.Data.SqlClient;
namespace SchoolDBExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 连接字符串,根据实际情况修改
            string connectionString = "Server=localhost;Database=SchoolDB;Integrated Security=True";
            // 创建 SqlConnection 对象
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                try
                {
                    // 打开连接
                    connection.Open();
                    Console.WriteLine("成功连接到数据库!");
                    // 执行一些数据库操作...
                }
                catch (Exception ex)
                {
                    Console.WriteLine("连接数据库时发生错误:" + ex.Message);
                }
            }
            Console.ReadKey();
        }
    }
}

3、插入数据:向 “Students” 表中插入一条新记录,可以使用 SqlCommand 对象的 ExecuteNonQuery 方法来执行插入操作。

// ...(前面的代码保持不变)
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("成功连接到数据库!");
        // 创建 SqlCommand 对象,指定要执行的 SQL 插入语句
        string insertSql = "INSERT INTO Students (StudentID, Name, Age, Grade) VALUES (@StudentID, @Name, @Age, @Grade)";
        using (SqlCommand command = new SqlCommand(insertSql, connection))
        {
            // 设置参数值
            command.Parameters.AddWithValue("@StudentID", 1);
            command.Parameters.AddWithValue("@Name", "张三");
            command.Parameters.AddWithValue("@Age", 20);
            command.Parameters.AddWithValue("@Grade", "大二");
            // 执行插入操作
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"成功插入 {rowsAffected} 条记录。");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("操作数据库时发生错误:" + ex.Message);
    }
}

4、查询数据:从 “Students” 表中查询所有学生的记录,并将结果输出到控制台,可以使用 SqlDataReader 对象来读取查询结果。

// ...(前面的代码保持不变)
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("成功连接到数据库!");
        // 创建 SqlCommand 对象,指定要执行的 SQL 查询语句
        string selectSql = "SELECT * FROM Students";
        using (SqlCommand command = new SqlCommand(selectSql, connection))
        {
            // 执行查询操作,返回 SqlDataReader 对象
            SqlDataReader reader = command.ExecuteReader();
            // 遍历查询结果并输出到控制台
            while (reader.Read())
            {
                int studentId = reader.GetInt32(0);
                string name = reader.GetString(1);
                int age = reader.GetInt32(2);
                string grade = reader.GetString(3);
                Console.WriteLine($"学号: {studentId}, 姓名: {name}, 年龄: {age}, 年级: {grade}");
            }
            // 关闭 SqlDataReader 对象
            reader.Close();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("操作数据库时发生错误:" + ex.Message);
    }
}

5、更新数据:更新 “Students” 表中某条记录的信息,将学号为 1 的学生的年龄更新为 21。

// ...(前面的代码保持不变)
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("成功连接到数据库!");
        // 创建 SqlCommand 对象,指定要执行的 SQL 更新语句
        string updateSql = "UPDATE Students SET Age = @Age WHERE StudentID = @StudentID";
        using (SqlCommand command = new SqlCommand(updateSql, connection))
        {
            // 设置参数值
            command.Parameters.AddWithValue("@StudentID", 1);
            command.Parameters.AddWithValue("@Age", 21);
            // 执行更新操作
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"成功更新 {rowsAffected} 条记录。");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("操作数据库时发生错误:" + ex.Message);
    }
}

6、删除数据:删除 “Students” 表中某条记录,删除学号为 1 的学生。

// ...(前面的代码保持不变)
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("成功连接到数据库!");
        // 创建 SqlCommand 对象,指定要执行的 SQL 删除语句
        string deleteSql = "DELETE FROM Students WHERE StudentID = @StudentID";
        using (SqlCommand command = new SqlCommand(deleteSql, connection))
        {
            // 设置参数值
            command.Parameters.AddWithValue("@StudentID", 1);
            // 执行删除操作
            int rowsAffected = command.ExecuteNonQuery();
            Console.WriteLine($"成功删除 {rowsAffected} 条记录。");
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("操作数据库时发生错误:" + ex.Message);
    }
}

FAQs

1、问题:如何防止 SQL 注入攻击?

回答:在构建 SQL 查询时,应避免直接拼接用户输入的字符串,可以使用参数化查询,如上述代码中的command.Parameters.AddWithValue 方法,将用户输入作为参数传递给 SQL 语句,而不是直接拼接到查询字符串中,这样,即使用户输入了反面的 SQL 代码,也不会被执行,还可以对用户输入进行验证和过滤,确保其符合预期的格式和范围。

2、问题:如果连接数据库时出现 “找不到指定的服务器” 错误,可能是什么原因?如何解决?

回答:可能的原因包括服务器名称错误、服务器未启动、网络连接问题等,解决方法是检查服务器名称是否正确,确保服务器已启动并正在运行,检查网络连接是否正常,可以尝试使用 IP 地址代替服务器名称进行连接,或者在服务器上启用远程连接功能,并确保防火墙没有阻止连接请求。

0