使用 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

浙公网安备 33010602011771号