轻松搞定数据访问层

下面实现的方法,可以把你从SQL的Add,Delete,Update,Select的重复劳动解脱出来

1。实体类2。访问类

现在以下表为例tblPerson(perID,perName,perGender,perOld,perNation)

实体类Person---------IDNameGenderOldNation

访问基类DataOper------------Shared DeleteShared AddShared UpdateShared Select

访问类PersonOper:DataOper--------------------Shared GetAllShared GetPersonByIDShared GetPersonByNameShared Get......

将数据库表的信息导入到DB.XML文件中根据DB.XML文件生成实体类例如上面的tblPerson表对应的DB.XML中的一个表如下Name   DBName   Key   Seed    Type--------------------------------------ID        perID         1        1          IntegerName   perName    0        0          StringGender perGender  0        0          booleanOld       perOld       0        0          IntegerNation  perNation   0        0          String

将从数据库返回的DataSet转换成实体类,如果用一般方式写的话:ds=cmd.Execute("select * from tblPerson where ID=1")dim p as new Personp.ID=Ctype(ds.Tables(0).Rows(0).Item("perID"),Integer)p.Name=...p.Gender=...p.Old=...p.Nation=...一张表的转换还好办,那么如果又几十张表效率显得地下了

这里又另外一种通用的方法,利用.NET提供的反射功能!.NET提供的反射功能可以在知道类方法或属性的名称的情况下,动态访问类的方法。知道怎么做了吗?前面我们有一个从数据库对应的DB.XML数据库架构文件这个文件和实体类的字段一一对应所以我们只要遍历这个架构文件,利用反射,就能轻松实现上述的赋值了让我们再看看访问基类DataOper--------------Delete(o as Object)Add(o as Object)Update(o as Object)

选择Add(o as Object)为例说明public sub Add(o as Object)    Dim Type as String=O.GetType.ToString ' 得到传进来的对象的类型    ... ' 对象类型的字符串和刚才那个XML架构文件中表的名称一一映射    Dim SchemaTableName as String=GetSchemaTableName(Type) ' 取得需要操作的表的名称 及从 Person->tblPerson    ' 打开数据库架构文件    Dim dsSchema as new Dataset("DB.XML")        Dim SQL as String="Insert into " & SchemaTableName     Dim r as DataRow    For Each r in dsSchema.Tables(SchemaTableName)        ' 在这里操作上面的SQL语句,值的部分利用反射从o中取得,建议写一个专门身成特定对象特定操作的SQL语句的类        ' 处理一些特殊情况,如主键,自动增加值字段等        ' 如果在数据库架构文件中存储更多的架构信息,如最大值等,还可以完成一些数据验证之类的操作 ...    Next    SQLHelper.Excute(ConnectionString,...Text,SQL)end sub

Delete/Update的通用方法类似

这样,如果你要添加一个Person的话可以这样Dim p as New Personp.Name="HahaSoft"p.Gender=1p.Old=20...PersonOper.Add(p) ' 从DataOper继承的方法,也可以这样写:DataOper.Add(p)

如果要添加一个Book 的话,可以这样dim b as New Bookb.ISBN=b.Name=...BookOper.Add(b)

怎么样,是不是很通用?这样写成一个通用类,可以完成所有的实体类的Add/Update/Delete操作要注意的是,DB.XML数据库架构文件很重要

通用实体类操作完成了,下面是通用的 Select 方法以前在CSDN上看到过这样的文章:PersonOper.Keys("Name")="HahaSoft"PersonOper.keys("Gender")=1dim p as new Person=PersonOper.Select()这样就能返回相应的Person的实体类也可以变相完成一些方法:如getPersonByID(ID)getPersonByName()......

后来苦想一阵,终于实现了.(待续...)

注:(这里实现的单表的O-R映射,如果对有关联的表的话,只要声明一个如 alAddress as ArrayList 的成员就可以了,当然还涉及一些数据

晚期填充以提高效率的技巧,在这里就不详细介绍了) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Segmentation fault 是一种常见的编程错误,通常是由于程序访问了无效的内存地址导致的。要轻松搞定 Segmentation fault,你可以尝试以下几个步骤: 1. 检查代码:首先,仔细检查你的代码,看看是否有指针错误、数组越界等问题。确保你的代码没有访问无效内存地址的情况。 2. 调试工具:使用调试工具来帮助你找出 Segmentation fault 的原因。常用的调试工具包括gdb(GNU Debugger)和valgrind。这些工具可以帮助你跟踪程序执行过程中的问题,并给出相关的错误信息和堆栈跟踪。 3. 打印调试信息:在代码中添加一些调试输出语句来帮助你定位问题所在。可以输出变量的值、数组的长度等信息,以便更好地理解程序执行过程中的状态。 4. 逐步调试:使用调试器逐步执行程序,观察在哪一步出现了 Segmentation fault。这样可以帮助你定位问题所在,并找出导致错误的具体操作。 5. 内存管理:检查你的内存管理是否正确。确保你在使用指针时正确分配和释放内存,避免内存泄漏和悬挂指针等问题。 6. 编译选项:尝试使用不同的编译选项来编译你的程序,例如添加 -Wall 和 -Wextra 选项可以启用更多的警告信息,帮助你发现潜在的问题。 记住,解决 Segmentation fault 是一个逐步调试的过程,需要耐心和细心地排查问题。通过仔细检查代码、使用调试工具和打印调试信息,你应该能够找到并解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值