如何在UWP的DataConnection中读取数据表数据?已完成数据库连接
嘿,你已经搞定数据库连接并且测试正常,这步很棒!接下来读取数据其实很简单,我给你两种常用的实现方式,你可以根据自己的需求来选:
使用原生ADO.NET读取数据(基础实现)
这是最基础的方式,不需要额外依赖,适合原生.NET开发场景:
首先确认你已经引用了对应的SqlClient包:
- 如果你用的是.NET Framework,引用
System.Data.SqlClient - 如果是.NET Core/.NET 5+,引用
Microsoft.Data.SqlClient
- 如果你用的是.NET Framework,引用
在你的
App.cs里添加一个读取数据的方法,结合你的BooksData类来映射数据:
using System.Collections.Generic; using System.Data.SqlClient; // 或者 Microsoft.Data.SqlClient using System; public class App { public string connectionString = "Server = DESKTOP-Q42NBTE; Database = FirstDataBase; Trusted_Connection = true"; public string ConnectionString { get => connectionString; set => connectionString = value; } public List<BooksData> GetAllBooks() { var books = new List<BooksData>(); // using语句会自动释放资源,避免内存泄漏 using (var conn = new SqlConnection(ConnectionString)) { // 替换成你实际的表名和字段 string sqlQuery = "SELECT Title, Author, PublicationYear FROM Books"; conn.Open(); using (var cmd = new SqlCommand(sqlQuery, conn)) { using (var reader = cmd.ExecuteReader()) { // 逐行读取数据并映射到BooksData对象 while (reader.Read()) { var book = new BooksData(); book.Title = reader["Title"].ToString(); book.Author = reader["Author"].ToString(); // 处理可能的空值,避免转换异常 book.PublicationYear = reader["PublicationYear"] != DBNull.Value ? Convert.ToInt32(reader["PublicationYear"]) : 0; books.Add(book); } } } } return books; } } // 你的BooksData类(补充完整示例) public class BooksData { public string Title { get; set; } public string Author { get; set; } public int PublicationYear { get; set; } // 其他属性... }
注意点:
- 一定要替换
sqlQuery里的表名和字段为你数据库的实际内容 - 处理
DBNull很关键,不然遇到数据库空值会抛出转换异常 using语句是最佳实践,自动帮你关闭连接、释放资源
使用Dapper简化读取(推荐)
如果不想写繁琐的手动映射代码,Dapper这个轻量级ORM能帮你省很多事,代码更简洁:
先通过NuGet安装Dapper:右键你的项目 → 管理NuGet程序包 → 搜索"Dapper"并安装
然后写读取方法就简单多了:
using Dapper; using System.Collections.Generic; using System.Data.SqlClient; public class App { public string connectionString = "Server = DESKTOP-Q42NBTE; Database = FirstDataBase; Trusted_Connection = true"; public string ConnectionString { get => connectionString; set => connectionString = value; } public List<BooksData> GetAllBooksWithDapper() { using (var conn = new SqlConnection(ConnectionString)) { conn.Open(); // 同样替换成实际的表和字段 string sqlQuery = "SELECT Title, Author, PublicationYear FROM Books"; // Dapper会自动把查询结果映射到BooksData对象(属性名和字段名一致即可) return conn.Query<BooksData>(sqlQuery).ToList(); } } }
额外技巧:
- 如果数据库字段和类的属性名不一样,可以用SQL别名适配,比如
SELECT Book_Title AS Title FROM Books - 做条件查询时,一定要用参数化查询防止SQL注入,比如:
// 按作者查询的参数化示例 string query = "SELECT * FROM Books WHERE Author = @AuthorName"; var filteredBooks = conn.Query<BooksData>(query, new { AuthorName = "J.K.Rowling" }).ToList();
内容的提问来源于stack exchange,提问作者Boommer
相关产品推荐
相关产品推荐

