C#操作MSSQL数据库 -增删改查

要在C#中连接到Microsoft SQL Server数据库(MSSQL),你可以使用.NET Framework提供的System.Data.SqlClient命名空间中的类。

以下是一个简单的示例代码,展示了如何在C#中使用MSSQL数据库链接:

using System;
using System.Data.SqlClient;

namespace DatabaseExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourUsername;Password=YourPassword";

            // 连接到数据库
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();

                // 创建表
                string createTableQuery = "CREATE TABLE Persons (Id INT PRIMARY KEY, Name VARCHAR(50), Age INT)";
                using (SqlCommand createTableCommand = new SqlCommand(createTableQuery, connection))
                {
                    createTableCommand.ExecuteNonQuery();
                    Console.WriteLine("Table created successfully.");
                }

                // 插入数据
                string insertQuery = "INSERT INTO Persons (Id, Name, Age) VALUES (1, 'John', 30)";
                using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection))
                {
                    insertCommand.ExecuteNonQuery();
                    Console.WriteLine("Data inserted successfully.");
                }

                // 查询数据
                string selectQuery = "SELECT * FROM Persons";
                using (SqlCommand selectCommand = new SqlCommand(selectQuery, connection))
                {
                    using (SqlDataReader reader = selectCommand.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            int id = reader.GetInt32(0);
                            string name = reader.GetString(1);
                            int age = reader.GetInt32(2);
                            Console.WriteLine("Id: {0}, Name: {1}, Age: {2}", id, name, age);
                        }
                    }
                }

                // 关闭连接
                connection.Close();
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

在上述代码中,你需要替换serverNamedatabaseNameuserNamepassword为你实际的数据库服务器名称、数据库名称、登录用户名和密码。connectionString变量是用于建立数据库连接的连接字符串。

代码中的using语句块确保在使用完数据库连接后正确关闭连接。

try块中,通过调用SqlConnectionOpen方法打开数据库连接,并执行你需要的数据库操作。你可以在该块中添加自己的代码来执行SQL查询、插入、更新或删除操作。

catch块中,任何连接异常都会被捕获并输出错误消息。

最后,使用Console.ReadLine()方法等待用户按下Enter键,以保持控制台应用程序运行,以便你能够查看连接状态。

请记得在使用此代码之前,确保已安装.NET Framework,并将项目的引用中添加System.Data.SqlClient程序集。

---------------------

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=password";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            try
            {
                connection.Open();
                Console.WriteLine("数据库连接成功!");

                // 查询操作
                string query = "SELECT * FROM TableName";
                SqlCommand selectCommand = new SqlCommand(query, connection);

                using (SqlDataReader reader = selectCommand.ExecuteReader())
                {
                    Console.WriteLine("查询结果:");
                    Console.WriteLine("----------------------------");

                    while (reader.Read())
                    {
                        int id = reader.GetInt32(0);
                        string name = reader.GetString(1);

                        Console.WriteLine($"ID: {id}, Name: {name}");
                    }

                    Console.WriteLine("----------------------------");
                    Console.WriteLine();
                }

                // 插入操作
                string insertQuery = "INSERT INTO TableName (Column1, Column2) VALUES (@Value1, @Value2)";
                SqlCommand insertCommand = new SqlCommand(insertQuery, connection);
                insertCommand.Parameters.AddWithValue("@Value1", "Value1");
                insertCommand.Parameters.AddWithValue("@Value2", "Value2");
                int rowsInserted = insertCommand.ExecuteNonQuery();
                Console.WriteLine($"已插入 {rowsInserted} 行数据。");

                // 更新操作
                string updateQuery = "UPDATE TableName SET Column1 = @NewValue WHERE Column2 = @FilterValue";
                SqlCommand updateCommand = new SqlCommand(updateQuery, connection);
                updateCommand.Parameters.AddWithValue("@NewValue", "NewValue");
                updateCommand.Parameters.AddWithValue("@FilterValue", "FilterValue");
                int rowsUpdated = updateCommand.ExecuteNonQuery();
                Console.WriteLine($"已更新 {rowsUpdated} 行数据。");

                // 删除操作
                string deleteQuery = "DELETE FROM TableName WHERE Column1 = @FilterValue";
                SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection);
                deleteCommand.Parameters.AddWithValue("@FilterValue", "FilterValue");
                int rowsDeleted = deleteCommand.ExecuteNonQuery();
                Console.WriteLine($"已删除 {rowsDeleted} 行数据。");

                connection.Close();
                Console.WriteLine("数据库连接已关闭。");
            }
            catch (Exception ex)
            {
                Console.WriteLine("数据库连接失败: " + ex.Message);
            }
        }

        Console.ReadLine();
    }
}

在上述示例代码中,我们添加了插入、更新和删除数据的操作。

  • 插入数据:使用INSERT INTO语句并通过SqlParameter对象设置参数值来插入数据。使用ExecuteNonQuery方法执行插入操作,并获取受影响的行数。
  • 更新数据:使用UPDATE语句并通过SqlParameter对象设置参数值来更新数据。使用ExecuteNonQuery方法执行更新操作,并获取受影响的行数。
  • 删除数据:使用DELETE FROM语句并通过SqlParameter对象设置参数值来删除数据。使用ExecuteNonQuery方法执行删除操作,并获取受影响的行数。

-----------------------------

System.Data.SqlClient.SqlDataReader是用于在C#中读取来自Microsoft SQL Server数据库的结果集的类。它提供了一种逐行读取数据的方式,使你能够有效地处理大量的查询结果。

下面是一些常用的SqlDataReader的成员和方法:

  1. Read(): 用于读取结果集中的下一行数据。如果有更多行可用,返回true;否则,返回false

  2. 索引器(Indexer):使用列的索引或列名来访问当前行中的数据。例如,reader[0]可以获取第一个列的值,reader["ColumnName"]可以获取名为"ColumnName"的列的值。

  3. GetXXX(): 一系列的GetXXX方法用于获取不同数据类型的列值,如GetInt32()GetString()GetDateTime()等。这些方法接受列的索引或列名作为参数,并返回相应的数据类型的值。

  4. IsDBNull(): 用于检查当前行中的特定列的值是否为空(DBNull)。接受列的索引或列名作为参数,如果值为空,则返回true;否则,返回false

  5. Close(): 关闭SqlDataReader对象,并释放相关资源。

  6. Dispose(): 实现IDisposable接口的方法,用于释放资源。

-----------------

SqlDataReader类提供了一系列的GetXXX()方法,用于获取不同数据类型的列值。下面是一些常用的GetXXX()方法及其对应的数据类型:

  • GetBoolean: 获取布尔型(bool)列的值。
  • GetByte: 获取字节型(byte)列的值。
  • GetBytes: 获取二进制数据列的值,并将其读取到字节数组中。
  • GetChar: 获取字符型(char)列的值。
  • GetDateTime: 获取日期时间型(DateTime)列的值。
  • GetDecimal: 获取十进制数型(decimal)列的值。
  • GetDouble: 获取双精度浮点型(double)列的值。
  • GetFloat: 获取单精度浮点型(float)列的值。
  • GetGuid: 获取全局唯一标识符(GUID)列的值。
  • GetInt16: 获取短整型(short)列的值。
  • GetInt32: 获取整型(int)列的值。
  • GetInt64: 获取长整型(long)列的值。
  • GetString: 获取字符串型(string)列的值。

这些方法接受列的索引或列名作为参数,并返回相应的数据类型的值。你可以根据数据库中实际的列类型,选择适当的GetXXX()方法来获取对应的列值。

-------------

确保在读取数据时注意数据类型的匹配非常重要。以下是一些需要注意的事项:

  1. 使用正确的数据类型方法:根据数据库中列的数据类型,选择适当的SqlDataReader方法来读取数据。例如,如果列是整数类型,使用GetInt32;如果列是字符串类型,使用GetString;如果列是日期类型,使用GetDateTime等等。使用不匹配的方法可能会导致数据转换错误或异常。

  2. 检查DBNull:在读取数据库中的数据时,有可能会遇到DBNull.Value,表示某一列的值为空。在使用SqlDataReader读取每一列数据之前,最好使用IsDBNull方法检查该列的值是否为空,然后再进行适当的处理。

if (!reader.IsDBNull(columnIndex))
{
    // 读取数据
}
else
{
    // 处理空值情况
}

3.处理可为null的列:如果数据库中的某个列允许为空(即可为null),并且你使用了相应的数据类型来读取该列的值,那么需要注意处理可能出现的空值情况。你可以使用IsDBNull方法进行检查,或者使用可空类型(Nullable types)来接收该列的值。

例如,如果列Age允许为空,你可以使用GetInt32方法读取该列的值,并将其存储在int?(可空整数类型)变量中:

int? age = reader.IsDBNull(columnIndex) ? null : (int?)reader.GetInt32(columnIndex);

这样,如果列的值为空,age变量将被赋值为null;否则,它将被赋值为读取到的整数值。

4.注意数据精度和溢出:在读取数据库中的数值数据时,要确保目标变量的数据类型足够大以容纳可能的数值范围。如果目标变量的数据类型不足以容纳读取到的值,可能会发生数据溢出。

总之,在读取数据库数据时,确保使用正确的数据类型方法、处理空值情况以及注意数据精度和溢出问题是非常重要的,以确保正确解析和处理数据。根据数据库中列的数据类型进行适当的类型匹配和错误处理,可以提高代码的健壮性和可靠性。

-------------------

学习如何使用C#操作MSSQL数据库需要掌握以下内容:

  1. 基本的C#编程知识:在学习使用C#操作MSSQL之前,你需要对C#编程语言有基本的了解,包括语法、控制流、变量和数据类型、方法和类等基础知识。

  2. 数据库基础知识:了解数据库的基本概念和术语,包括表、列、行、主键、外键、索引等。掌握SQL语言的基本语法,包括SELECT、INSERT、UPDATE和DELETE等操作,以及条件、排序和聚合函数等。

  3. ADO.NET:ADO.NET是用于访问数据库的.NET框架的一部分。学习ADO.NET的基本概念和原理,包括连接数据库、执行SQL语句、处理结果集等。

  4. SqlConnection和SqlCommand类:掌握使用SqlConnection和SqlCommand类来建立数据库连接、执行SQL语句以及处理查询结果。

  5. SqlDataReader类:学习如何使用SqlDataReader类逐行读取查询结果集的数据。

  6. 参数化查询:了解参数化查询的概念和重要性,学习如何使用SqlParameter类来执行参数化查询,以避免SQL注入和提高安全性。

  7. 错误处理和异常处理:学习如何处理数据库操作中可能出现的错误和异常情况,包括连接失败、查询语法错误、数据类型转换错误等。

  8. 事务处理:了解事务的概念和作用,学习如何使用事务来确保数据库操作的一致性和完整性。

  9. 数据库连接池:了解数据库连接池的概念和作用,学习如何正确管理和利用连接池以提高数据库访问性能。

  10. LINQ to SQL或Entity Framework:这些是.NET中更高级的ORM(对象关系映射)工具,它们提供了更方便和高级的方式来操作数据库,可以进一步简化数据库访问的代码。

为了深入学习掌握C#操作MSSQL,你可以采取以下步骤:

  1. 学习C#语言基础知识,包括语法、控制流、变量和数据类型、方法和类等。可以通过在线教程、教材或视频课程来学习。

  2. 学习数据库基础知识和SQL语言。了解关系型数据库的基本概念和SQL语言的基本语法。可以阅读相关的书籍、教程或参加在线课程。

  3. 学习ADO.NET的基本概念和用法。了解如何连接数据库、执行SQL语句以及处理结果集。可以查阅官方文档、教程和示例代码。

  4. 掌握SqlConnection和SqlCommand类的用法。

-------------------

当你熟悉ADO.NET的基本概念后,可以开始学习SqlConnection和SqlCommand类的用法。

SqlConnection类用于建立与MSSQL数据库的连接,你需要提供连接字符串(connection string)来指定数据库的位置、认证方式和其他连接选项。可以使用Open()方法打开数据库连接,使用Close()方法关闭数据库连接。

SqlCommand类用于执行SQL语句或存储过程。你可以创建一个SqlCommand对象,指定要执行的SQL语句,并将其与SqlConnection对象关联。使用ExecuteNonQuery()方法执行非查询操作(如INSERT、UPDATE、DELETE),返回受影响的行数。使用ExecuteReader()方法执行查询操作,返回一个SqlDataReader对象,用于逐行读取查询结果集的数据。

除了SqlConnection和SqlCommand类,还有其他一些重要的类和概念需要学习:

  • SqlParameter类:用于构建参数化查询,避免SQL注入攻击,并能处理不同的数据类型。

  • SqlDataReader类:用于逐行读取查询结果集的数据。可以使用GetInt32、GetString、GetDateTime等方法按照列的类型获取数据。

  • 数据类型映射:了解C#和MSSQL之间的数据类型映射关系,确保在读取和写入数据时类型匹配。

  • 错误处理和异常处理:学习如何处理数据库操作中可能出现的错误和异常情况,使用try-catch语句来捕获异常并进行相应的处理。

  • 事务处理:了解事务的概念和作用,学习如何使用事务来确保数据库操作的一致性和完整性。可以使用SqlTransaction类来管理事务。

  • 连接池管理:了解数据库连接池的概念和作用,学习如何正确使用连接池以提高性能。可以使用Connection Pooling来自动管理连接池。

  • LINQ to SQL或Entity Framework:这些是.NET中更高级的ORM工具,它们提供了更方便和高级的方式来操作数据库,可以进一步简化数据库访问的代码。可以选择学习其中一个ORM工具来提高开发效率。

最重要的是,实践是学习的关键。尝试编写一些简单的C#程序,连接到MSSQL数据库,执行查询、插入、更新和删除操作。通过不断实践和调试,逐步加深对C#操作MSSQL的理解和熟练度。同时,阅读官方文档、参考书籍和在线教程也是很有帮助的,可以进一步扩展你的知识和技能。

-----------

当你掌握了基本的ADO.NET和C#操作MSSQL的知识后,你可以进一步深入学习以下内容:

  1. 数据库连接管理:了解如何有效地管理数据库连接,包括连接的打开和关闭、连接的池化和释放等。学习如何优化连接管理,以提高性能和资源利用率。

  2. 数据库事务:深入了解事务的概念、特性和用法。学习如何使用事务来确保多个数据库操作的原子性和一致性。掌握事务的隔离级别和并发控制的概念,以处理并发访问和数据一致性的问题。

  3. 存储过程和参数化查询:学习如何使用存储过程来封装复杂的数据库逻辑,并通过参数化查询来提高性能和安全性。了解存储过程的优势和用法,以及如何在C#中调用和执行存储过程。

  4. 数据库连接字符串管理:学习如何管理和配置数据库连接字符串,包括使用配置文件、加密连接字符串、动态生成连接字符串等。了解连接字符串中各个参数的含义和用法,以适应不同的数据库配置和环境。

  5. 数据库性能优化:了解如何优化数据库查询性能,包括使用索引、优化查询语句、避免重复查询、使用批量操作等技巧。学习如何使用数据库性能分析工具来识别和解决性能瓶颈。

  6. 异步数据库操作:学习如何使用异步编程模型(Async/Await)来执行数据库操作,以提高系统的响应性和吞吐量。了解异步操作的概念和原理,并掌握如何正确地使用异步方法来操作数据库。

  7. LINQ to SQL或Entity Framework进阶:如果你有兴趣进一步提高数据库访问的便捷性和灵活性,可以深入学习LINQ to SQL或Entity Framework。了解高级查询、关联查询、延迟加载和实体关系等概念,以及如何进行复杂数据操作和性能优化。

  8. 数据库安全性和权限管理:了解数据库的安全性和权限管理,包括用户、角色、权限的概念和用法。学习如何设置和管理数据库的访问权限,以及如何处理敏感数据和防止安全漏洞。

  9. 数据库迁移和版本管理:学习如何进行数据库迁移和版本管理,以方便在不同环境中部署和更新数据库结构。了解数据库迁移工具和技术,如Entity Framework Migrations、FluentMigrator等。

  10. 错误处理和日志记录:学习如何处理数据库操作中可能出现的错误和异常情况,并进行适当的错误处理和日志记录。掌握如何捕获和处理各种类型的数据库异常,并提供友好的错误信息和日志记录功能。

通过深入学习上述内容,你将能够更加全面地掌握C#操作MSSQL数据库的技能,并能够应对更复杂的数据库操作和需求。同时,参考官方文档、书籍和在线资源也是深入学习的重要途径,可以进一步扩展你的知识和技术广度。最重要的是,通过实践和项目经验来应用所学的知识,这将帮助你加深理解并提高实际应用的能力。

你可能感兴趣的:(c#,数据库,sqlserver)