You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UWP的DataConnection中读取数据表数据?已完成数据库连接

嘿,你已经搞定数据库连接并且测试正常,这步很棒!接下来读取数据其实很简单,我给你两种常用的实现方式,你可以根据自己的需求来选:

使用原生ADO.NET读取数据(基础实现)

这是最基础的方式,不需要额外依赖,适合原生.NET开发场景:

  1. 首先确认你已经引用了对应的SqlClient包:

    • 如果你用的是.NET Framework,引用System.Data.SqlClient
    • 如果是.NET Core/.NET 5+,引用Microsoft.Data.SqlClient
  2. 在你的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能帮你省很多事,代码更简洁:

  1. 先通过NuGet安装Dapper:右键你的项目 → 管理NuGet程序包 → 搜索"Dapper"并安装

  2. 然后写读取方法就简单多了:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:13:33