1

我见过很多使用 C# 访问数据库的方法,我不知道哪种方法最适合简单的读/写/操作数据。我过去只使用通用 DataSet/DataTable 对象,但我正在尝试使用更多类型安全的结构。我首先在 Visual Studio 中添加数据集 (xsd) 并连接到 SQL Server 后端。

我正在尝试查询在表中搜索给定字符串的列,但该列不是主键(所以我不能使用 .Find())。我该怎么做呢?我需要使用 LINQ 还是可以使用扩展方法/lambda 表达式?

在更基本的层面上,当使用设计时数据集时,我需要使用表适配器来填充我使用的数据集中的每个表,还是我只是实例化数据集?文档让我有点困惑。

4

1 回答 1

3

您可以使用Linq-To-DataSet最强大的方式(不是在效率方面,而是在可读性和可维护性方面)来查询DataSet.

阅读更多:查询类型化数据集

您可以选择在 VS 设计器上创建一个TableAdapter或仅创建一个。DataTable如果添加 TableAdapter VS 也会创建相应的 DataTable。如果只添加 DataTable,则必须提供自己的填充方式。 TableAdapters类似于DataAdapterADO.NET 中的 a。

因此,如果您创建了一个名为的 DataSetDataSet1并添加了一个选择名为 的表的 TableAdapter ,Visual Studio 将自动在命名空间中tabData创建一个名为的 DataTabletabDataDataTable和一个TableAdapter名为的。tabDataTableAdapterDataSet1TableAdapters

所以你可以用这种方式填写这张表:

var dataSet = new DataSet1();
var da = new DataSet1TableAdapters.tabDataTableAdapter();
da.Fill(dataSet.tabData);

假设表有列NameAge并且您想要查找名称以开头"Jon"且年龄大于 30 的所有行,您可以使用 LINQ Where

var jons = dataSet.tabData
                  .Where(r => r.Name.StartsWith("Jon") && r.Age > 30);
foreach (DataSet1.tabDataRow row in jons)
{
    Console.WriteLine("{0} is {1} years old", row.Name, row.Age);
}

请注意,您可以使用安全的 LINQ-To-DataSet 类型(r.Name是字符串和r.Ageint)。

于 2012-09-28T14:54:05.410 回答