我已经看到很多使用C#访问数据库的方法我不知道哪一个对于简单的读/写/操作数据是“最好的”。我曾经只使用通用的DataSet / DataTable对象,但我正在尝试使用更多类型安全的结构。我首先在visual studio中添加了一个数据集(xsd)并连接到SQL服务器后端。
我正在尝试查询表中的列以查找给定字符串,但该列不是主键(因此我不能使用.Find())。我该怎么做呢?我需要使用LINQ还是可以使用扩展方法/ lambda表达式?
在更基础的层面上,当使用设计时数据集时,我是否需要使用表适配器来填充我使用的数据集中的每个表,或者我只是实例化数据集?文档对我来说有点混乱。
答案 0 :(得分:3)
您可以使用Linq-To-DataSet
来查询DataSet
,这是最强大的方式(不是在效率方面,而是在可读性和可维护性方面)。
了解详情:Querying Typed DataSets。
您可以选择在VS设计器上创建TableAdapter
或DataTable
。如果添加TableAdapter VS也会创建相应的DataTable。如果您只添加DataTable,则必须提供自己的方式来填充它。 TableAdapters
类似于ADO.NET中的DataAdapter
。
因此,如果您创建了一个名为DataSet1
的DataSet并添加了一个选择名为tabData
的表的TableAdapter,Visual Studio将自动创建一个名为tabDataDataTable
的DataTable和一个{{1}在命名空间TableAdapter
中命名为tabDataTableAdapter
。
所以你可以用这种方式填写这张表:
DataSet1TableAdapters
假设该表包含列var dataSet = new DataSet1();
var da = new DataSet1TableAdapters.tabDataTableAdapter();
da.Fill(dataSet.tabData);
和Name
,并且您希望找到名称以Age
开头并且年龄为>的所有行。 30,你可以使用LINQ的"Jon"
:
Where
请注意,您可以使用LINQ-To-DataSet类型安全(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);
}
是一个字符串,r.Name
是一个int。)