• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
铁松溜达py
帮助1

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

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

  1.  
    using System;
  2.  
    using System.Data.SqlClient;
  3.  
     
  4.  
    namespace DatabaseExample
  5.  
    {
  6.  
    class Program
  7.  
    {
  8.  
    static void Main(string[] args)
  9.  
    {
  10.  
    string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourUsername;Password=YourPassword";
  11.  
     
  12.  
    // 连接到数据库
  13.  
    using (SqlConnection connection = new SqlConnection(connectionString))
  14.  
    {
  15.  
    connection.Open();
  16.  
     
  17.  
    // 创建表
  18.  
    string createTableQuery = "CREATE TABLE Persons (Id INT PRIMARY KEY, Name VARCHAR(50), Age INT)";
  19.  
    using (SqlCommand createTableCommand = new SqlCommand(createTableQuery, connection))
  20.  
    {
  21.  
    createTableCommand.ExecuteNonQuery();
  22.  
    Console.WriteLine("Table created successfully.");
  23.  
    }
  24.  
     
  25.  
    // 插入数据
  26.  
    string insertQuery = "INSERT INTO Persons (Id, Name, Age) VALUES (1, 'John', 30)";
  27.  
    using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection))
  28.  
    {
  29.  
    insertCommand.ExecuteNonQuery();
  30.  
    Console.WriteLine("Data inserted successfully.");
  31.  
    }
  32.  
     
  33.  
    // 查询数据
  34.  
    string selectQuery = "SELECT * FROM Persons";
  35.  
    using (SqlCommand selectCommand = new SqlCommand(selectQuery, connection))
  36.  
    {
  37.  
    using (SqlDataReader reader = selectCommand.ExecuteReader())
  38.  
    {
  39.  
    while (reader.Read())
  40.  
    {
  41.  
    int id = reader.GetInt32(0);
  42.  
    string name = reader.GetString(1);
  43.  
    int age = reader.GetInt32(2);
  44.  
    Console.WriteLine("Id: {0}, Name: {1}, Age: {2}", id, name, age);
  45.  
    }
  46.  
    }
  47.  
    }
  48.  
     
  49.  
    // 关闭连接
  50.  
    connection.Close();
  51.  
    }
  52.  
     
  53.  
    Console.WriteLine("Press any key to exit...");
  54.  
    Console.ReadKey();
  55.  
    }
  56.  
    }
  57.  
    }
学新通

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

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

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

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

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

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

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

  1.  
    using System;
  2.  
    using System.Data.SqlClient;
  3.  
     
  4.  
    class Program
  5.  
    {
  6.  
    static void Main()
  7.  
    {
  8.  
    string connectionString = "Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=password";
  9.  
     
  10.  
    using (SqlConnection connection = new SqlConnection(connectionString))
  11.  
    {
  12.  
    try
  13.  
    {
  14.  
    connection.Open();
  15.  
    Console.WriteLine("数据库连接成功!");
  16.  
     
  17.  
    // 查询操作
  18.  
    string query = "SELECT * FROM TableName";
  19.  
    SqlCommand selectCommand = new SqlCommand(query, connection);
  20.  
     
  21.  
    using (SqlDataReader reader = selectCommand.ExecuteReader())
  22.  
    {
  23.  
    Console.WriteLine("查询结果:");
  24.  
    Console.WriteLine("----------------------------");
  25.  
     
  26.  
    while (reader.Read())
  27.  
    {
  28.  
    int id = reader.GetInt32(0);
  29.  
    string name = reader.GetString(1);
  30.  
     
  31.  
    Console.WriteLine($"ID: {id}, Name: {name}");
  32.  
    }
  33.  
     
  34.  
    Console.WriteLine("----------------------------");
  35.  
    Console.WriteLine();
  36.  
    }
  37.  
     
  38.  
    // 插入操作
  39.  
    string insertQuery = "INSERT INTO TableName (Column1, Column2) VALUES (@Value1, @Value2)";
  40.  
    SqlCommand insertCommand = new SqlCommand(insertQuery, connection);
  41.  
    insertCommand.Parameters.AddWithValue("@Value1", "Value1");
  42.  
    insertCommand.Parameters.AddWithValue("@Value2", "Value2");
  43.  
    int rowsInserted = insertCommand.ExecuteNonQuery();
  44.  
    Console.WriteLine($"已插入 {rowsInserted} 行数据。");
  45.  
     
  46.  
    // 更新操作
  47.  
    string updateQuery = "UPDATE TableName SET Column1 = @NewValue WHERE Column2 = @FilterValue";
  48.  
    SqlCommand updateCommand = new SqlCommand(updateQuery, connection);
  49.  
    updateCommand.Parameters.AddWithValue("@NewValue", "NewValue");
  50.  
    updateCommand.Parameters.AddWithValue("@FilterValue", "FilterValue");
  51.  
    int rowsUpdated = updateCommand.ExecuteNonQuery();
  52.  
    Console.WriteLine($"已更新 {rowsUpdated} 行数据。");
  53.  
     
  54.  
    // 删除操作
  55.  
    string deleteQuery = "DELETE FROM TableName WHERE Column1 = @FilterValue";
  56.  
    SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection);
  57.  
    deleteCommand.Parameters.AddWithValue("@FilterValue", "FilterValue");
  58.  
    int rowsDeleted = deleteCommand.ExecuteNonQuery();
  59.  
    Console.WriteLine($"已删除 {rowsDeleted} 行数据。");
  60.  
     
  61.  
    connection.Close();
  62.  
    Console.WriteLine("数据库连接已关闭。");
  63.  
    }
  64.  
    catch (Exception ex)
  65.  
    {
  66.  
    Console.WriteLine("数据库连接失败: " ex.Message);
  67.  
    }
  68.  
    }
  69.  
     
  70.  
    Console.ReadLine();
  71.  
    }
  72.  
    }
学新通

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

  • 插入数据:使用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方法检查该列的值是否为空,然后再进行适当的处理。

  1.  
    if (!reader.IsDBNull(columnIndex))
  2.  
    {
  3.  
    // 读取数据
  4.  
    }
  5.  
    else
  6.  
    {
  7.  
    // 处理空值情况
  8.  
    }

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghegfj
系列文章
更多 icon
同类精品
更多 icon
继续加载