首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SQL表信息填充C#结构的有效/快速方法是什么?

使用SQL表信息填充C#结构的有效/快速方法是什么?
EN

Stack Overflow用户
提问于 2012-01-08 11:24:07
回答 6查看 1.5K关注 0票数 0

简而言之:我有一些数据库表数据要用来填充c#结构。

例如:

代码语言:javascript
运行
复制
struct Phone
{
    public int PhoneID;
    public string Number;
}
struct Patient
{
    public Phone WorkPhone;
}

SQL表如下所示:

代码语言:javascript
运行
复制
Patient table:  
    Patient ID, Patient Name, etc.  
Phone table:  
    PhoneID, Number, Phone Type etc.  

基本上,结构是SQL表的镜像。

我有通过select语句传递的主键(PhoneID)。因此,对于patient表,我将只检索一行,对于Phone表,我将最多检索5行(它们可以包含WorkCellHome等)。

我没有一个很好的方法来轻松地将这个表填充到一个结构中。我现在做的是一个接一个。你可以看到每个病人有数百个变量,这是一个非常乏味和高度代码密集型的过程。有没有办法,也许我可以在变量名中有一个变量,例如,如果列名是Phone,那么它就会填充Phone变量。希望这是有意义的。

代码语言:javascript
运行
复制
query = "SELECT * FROM Phone p WHERE p.StatusID = 'A' AND ObjectTypeID = 'PA' AND ObjectID = '" + PatientID.ToString() + "'";
SqlDataAdapter a1 = new SqlDataAdapter(query, dataConnection);
DataTable t1 = new DataTable();
a1.Fill(t1);
DataTableReader r1 = t.CreateDataReader();
//object value = null;
while (reader.Read())
{
    for (int i = 0; i < r1.FieldCount; i++)
    {
        if (!r1.IsDBNull(i))
        {
            if reader.GetValue(i)
            switch (r1.GetName(i))
            {
                case "PhoneID": { pr.HomePhone.PhoneID = (int)reader.GetValue(i); break; }
                case "PhoneTypeID": { pr.HomePhone.PhoneTypeID = (string)reader.GetValue(i); break; }
                case "ObjectID": { pr.HomePhone.ObjectID = (int)reader.GetValue(i); break; }
                case "ObjectTypeID": { pr.HomePhone.ObjectTypeID = (string)reader.GetValue(i); break; }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-08 11:39:37

你可能需要像NHibernateLightspeedEntity Framework这样的对象关系管理。

如果它们被夸大了,可以看看像Massive这样的新的迷你ORM类库。

票数 4
EN

Stack Overflow用户

发布于 2012-01-08 11:37:16

成熟的ORM可能是不可能的,但您可以使用反射将datatable中的值映射到对象。或者,您也可以求助于Automapper之类的东西。

票数 2
EN

Stack Overflow用户

发布于 2012-01-09 07:25:09

Dapper (stackoverflow轻量级对象映射器)似乎是一个强有力的候选者。到目前为止,在一些项目中使用了它,并且很喜欢它。简单,快速,无痛。

除非结构是必需的,否则我建议切换到类。

http://code.google.com/p/dapper-dot-net/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8775142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档