我如何从我的SQL Server数据集提取数据到一个类,我可以使用
本文关键字:一个 可以使 我可以 我的 SQL Server 数据 提取 数据集 | 更新日期: 2023-09-27 18:10:27
我正试图在几天前开始的一个项目中取得进展,我花了一整天的时间阅读ADO.net,但我正在努力理解如何将我的SQL server表数据提取到一个类中,我基本上可以运行一些计算,如"startTime - endTime = totalWorked",这将允许我创建一个单独的表单,在那里我可以显示我的摘要。
我有我在这里做的小代码,它连接到我的数据库,并在代码中创建一个datagridview。http://pastebin.com/VNRDqHjM
你能给我一些建议,告诉我如何实现我想做的事吗?
谢谢,罗斯
一种选择是将项放入DTO。你可以遍历一个IDataReader(我的首选)或一个DataSet。
假设下面的IDataReader连接到一个"Select EmployeeKey, LastName, FirstName, HireDate from dbo.Employee;"
[Serializable]
public partial class Employee
{
public int EmployeeKey { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime HireDate { get; set; }
}
[Serializable]
public class EmployeeCollection : List<Employee>
{
}
internal static class EmployeeSearchResultsLayouts
{
public static readonly int EMPLOYEE_KEY = 0;
public static readonly int LAST_NAME = 1;
public static readonly int FIRST_NAME = 2;
public static readonly int HIRE_DATE = 3;
}
public EmployeeCollection SerializeEmployeeSearchForCollection(IDataReader dataReader)
{
Employee item = new Employee();
EmployeeCollection returnCollection = new EmployeeCollection();
try
{
int fc = dataReader.FieldCount;//just an FYI value
int counter = 0;//just an fyi of the number of rows
while (dataReader.Read())
{
if (!(dataReader.IsDBNull(EmployeeSearchResultsLayouts.EMPLOYEE_KEY)))
{
item = new Employee() { EmployeeKey = dataReader.GetInt32(EmployeeSearchResultsLayouts.EMPLOYEE_KEY) };
if (!(dataReader.IsDBNull(EmployeeSearchResultsLayouts.LAST_NAME)))
{
item.LastName = dataReader.GetString(EmployeeSearchResultsLayouts.LAST_NAME);
}
if (!(dataReader.IsDBNull(EmployeeSearchResultsLayouts.FIRST_NAME)))
{
item.FirstName = dataReader.GetString(EmployeeSearchResultsLayouts.FIRST_NAME);
}
if (!(dataReader.IsDBNull(EmployeeSearchResultsLayouts.HIRE_DATE)))
{
item.HireDate = dataReader.GetDateTime(EmployeeSearchResultsLayouts.HIRE_DATE);
}
returnCollection.Add(item);
}
counter++;
}
return returnCollection;
}
//no catch here... see http://blogs.msdn.com/brada/archive/2004/12/03/274718.aspx
finally
{
if (!((dataReader == null)))
{
try
{
dataReader.Close();
}
catch
{
}
}
}
}
将值放入DTO后,可以添加一个只读属性,如下所示:
public int DaysEmployed
{
get
{
int returnValue = 0;
returnValue = Convert.ToInt32 (DateTime.Now.Subtract(this.HireDate).TotalDays);
return returnValue;
}
}
它将利用您现有的属性。
请记住,如果你不提供一个HireDate对象,你将不得不处理的情况。但是你懂的。
您可以在具有计算列的DataSet/DataTable中执行此操作。但在我看来,这"非常像2004年"。DTO(或者POCO,如果你添加一些基本的逻辑)是非常考验时间的。
我强烈建议您检查一些ORM软件,它们可以自动为您完成这些工作。自己创建类,然后用对象填充它们,既耗时又容易出错。现在有很多工具可以帮你做所有的工作。
在这里查看。net的不同选项列表。我推荐那些已经内建在。net框架中的工具,但这些都不会出错。