使用 ADO.NET 读取和写入数据

使用 ADO.NET 读取和写入数据

如果说前一篇是“地基”,
那这一篇就是 C# 从 UI 走向真实系统的分水岭


一、Java 程序员视角看 C# 数据库访问

你可能最关心的是:

C# 连数据库,是不是 JDBC 那一套?

答案是:

是的,思想 100% 一样

JDBC vs ADO.NET 对照表

Java (JDBC) C# (ADO.NET)
DriverManager SqlConnection
Connection SqlConnection
PreparedStatement SqlCommand
ResultSet SqlDataReader

概念完全一致,只是类名不同


二、准备工作:连接字符串

以 SQL Server 为例:

string connectionString =
    "Server=localhost;Database=inventory_db;Trusted_Connection=True;";

后期你只需要改这里,就能换数据库


三、查询数据库(最核心)

查询商品列表示例

using System.Data.SqlClient;

string sql = "SELECT id, product_name, price FROM product";

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();

    SqlCommand cmd = new SqlCommand(sql, conn);
    SqlDataReader reader = cmd.ExecuteReader();

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

        Console.WriteLine($"{id} - {name} - {price}");
    }
}

和 JDBC 的“对位理解”

ResultSet rs = stmt.executeQuery(sql);

SqlDataReader reader = cmd.ExecuteReader();

四、插入数据(写数据库)

为什么一定要用参数?

错误示例(拼 SQL):

string sql = $"INSERT INTO product(product_name) VALUES('{name}')";

正确写法(参数化):

string sql =
    "INSERT INTO product(product_code, product_name, price) " +
    "VALUES(@code, @name, @price)";

using (SqlConnection conn = new SqlConnection(connectionString))
{
    conn.Open();

    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@code", "P001");
    cmd.Parameters.AddWithValue("@name", "键盘");
    cmd.Parameters.AddWithValue("@price", 199.00);

    int rows = cmd.ExecuteNonQuery();
    Console.WriteLine($"影响行数:{rows}");
}

五、把数据库和“界面”连起来(思维转变)

你现在应该意识到一件事:

窗体 ≠ 系统
数据库 ≠ 附件

真正的系统结构是:

界面(按钮)
   ↓
C# 业务代码
   ↓
SQL
   ↓
数据库

以后你会自然演进为:

  • Service 层
  • Repository / DAO 层
  • 实体类(Model)

六、C# 数据库编程的三条铁律

1. 连接一定要关

using (SqlConnection conn = ...)

2. 永远使用参数化 SQL

防 SQL 注入 + 类型安全

3. 数据库错误优先查 SQL

80% 的问题不是 C#,而是 SQL

posted @ 2025-10-27 21:19  元始天尊123  阅读(5)  评论(0)    收藏  举报