我正在努力进入我几天前开始的项目,我花了一整天时间在ADO.net上阅读,但我很难理解如何提取我的SQL服务器表数据进入一个类,我基本上可以运行一些计算,如“startTime - endTime = totalWorked”,这将允许我创建一个单独的表单,我可以显示我的摘要。
我有我在这里完成的小代码,它连接到我的数据库并在代码中创建datagridview。 http://pastebin.com/VNRDqHjM
你能给我一些关于如何实现我想做的事情的指示吗?
非常感谢, 罗斯
答案 0 :(得分:0)
一种选择是将物品放入DTO。您可以遍历IDataReader(我的首选项)或DataSet。
想象一下,下面的IDataReader连接到"从dbo.Employee选择EmployeeKey,LastName,FirstName,HireDate;"
[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; 2004年&#39; ish&#34;恕我直言。 DTO(或POCO,如果你添加一些基本逻辑)是经过时间测试的。
答案 1 :(得分:0)
我强烈建议您查看一些自动为您执行此操作的ORM软件。自己创建类然后用对象填充它是耗时且容易出错的。如今,有一些工具可以为您完成所有工作。
查看.NET here的不同选项列表。我建议那些已经内置到.NET框架中但不会出错的任何内容。