45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:设计行政区划程序的内容介绍

设计行政区划程序的内容介绍

2016-08-29 17:19:43 来源:www.45fan.com 【

设计行政区划程序的内容介绍

Author:水如烟

总目录:行政区划数据方案设计

上一篇,行政区划程序的设计(六)

在编写RegionalCodeLibary项目前,先将前面的分析“成果”总结下来。

LzmTW项目:

八位日期字符串与日期的转换函数

文件uString.vb,

NamespaceuSystem

PublicClassuString

PrivateSubNew()

EndSub

'''<summary>

'''日期转八位字符串

'''</summary>

'''<paramname="date">日期</param>

'''<remarks>如2006-9-28转换为20060928</remarks>

PublicSharedFunctionGetDateString(ByVal[date]AsDateTime)AsString

Return[date].ToString("yyyyMMdd")

EndFunction

'''<summary>

'''八位字符串转日期

'''</summary>

'''<paramname="dateString">八位字符串</param>

'''<returns></returns>

'''<remarks>如20060928转换为2006-9-28</remarks>

PublicSharedFunctionGetDate(ByValdateStringAsString)AsDateTime

ReturnCType(ToDateFormat(dateString),DateTime)

EndFunction

'将八位字符串转换为日期字符串格式,如20060928转换为2006-09-28

PrivateSharedFunctionToDateFormat(ByValdateStringAsString)AsString

ReturnSystem.Text.RegularExpressions.Regex.Replace(dateString,"/b(/d{4})(/d{2})(/d{2})/b","${1}-${2}-${3}")

EndFunction

EndClass

EndNamespace

 

RegionalCodeCommon项目:

数据集(这可以在IDE上用拖放的形式来建)

(代码略)

接口

文件IAction.vb(不知怎么取名好)

PublicInterfaceIAction

FunctionIsSameDataDate(ByValqueryDataDateAsDateTime,ByValcurrentDataDateAsString)AsBoolean

FunctionGetAllInformationsTable(ByValqueryDataDateAsString)AsdsRegionalCode.AllInformationsTableDataTable

EndInterface

RegionalCodeApplication项目:

UserControlQueryBase控件

文件UserControlQueryBase.vb(代码略)

所有项目的编译环境,Option Strict设为ON。

现在的方案组织如下:

设计行政区划程序的内容介绍

现在说RegionalCodeLibary项目的编写。

一个项目的编写,我的理解,由两部分组成,一是分析,二是编码。公用类的项目只需关心合理组织就可以了,具体项目还是要分析的。

上文中曾对RegionalCodeLibary的作用作了分析:它负责与数据库直接打交道,不依赖任何其它项目。它对外提供版本数据的更新;输出信息视图(一个DataTable)两个功能。

输出信息视图很简单,只需定义一个函数就够了。

FUNCTION ProvideAllInformations(ByVal regionalCodeDate As String) As DataTable

参数regionalCodeDate为八位日期字符串,也就是存储过程“[Program].[行政区情况]”的“@当前时间”所需要的值。

现在看提供版本数据更新这个服务,如何定义这个函数。

注:在这里,要完全抛开原来已建的那个方案,就是那个现在还在提供下载的,关于How To:利用Excel的QueryTable下载网上数据 的示例方案。那个方案只是测试一种方法是否可行随意建立起来的。

因为是直接与数据库打交道,必然的要联系数据库的特点,看数据库本身对外提供的服务。

在建立数据库时我曾提到,数据库中,只有命名空间为[Program]的才对外服务,所以,除了存储过程“[Program].[行政区情况]”,就只有“[Program].[增添记录] @区划码, @名称, @起始日期”了。而这个本身也是用来更新数据的。

现在,依据这个存储过程,初步定义函数如下:

SUB ProvideAddRecord(ByVal code As String, name As String, initialDataDate As String)

这是一个记录一个记录更新,速度肯定“慢”,可数据库提供的服务本身已经决定了。是否还可以提高?

重新审视数据库。

SQLServer2005提供了一种数据类型xml,如果外部向它提供合适的xml数据,那么,完全可以以数据集为参数来更新数据库。只是,我现在还不曾用过xml类型,不熟悉。所以将且用单行更新的方法,以后再改进。

这里提到数据集的概念,是否可以利用?是可以的。外部可以对这个项目提供DataTable,遍历更新。函数可重构(重新构造的意思,并非是术语的重构)为

SUB ProvideUpdateDatabase(ByVal table As DataTable)

有严格格式的xml数据可以转换为一个DataTable。因此,为了以后升级方便(以后在数据库我可能利用xml数据类型了),重新将函数定义为

OVERRIDABLE SUB ProvideUpdateDatabase(ByVal table As DataTable)

分析到了这里,还要考虑一些数据安全、完整性等问题。

是否需要事务来保障?

从[Program].[增添记录]运行过程的特点,可以不考虑事务,如果执行过程中中断了,重新更新对应版本的数据就可以了。

说到版本数据,又联系到数据的来源。它在网上,有多个版本。无论是用ExcelQueryTable还是别的方法来取得数据,这个过程,都希望将全部版本的数据一次下载下来,然后一次更新到数据库中去,这样,它的数据集是多个DataTable了。函数是可以接受这个数据集的。重构如下:

OVERRIDABLE SUB ProvideUpdateDatabase(ByVal ds As DataSet)

还有,在设计数据库时我曾提到,全部数据中有一个最早的起始日期。如果查询早于这个“最早起始日期”的信息,是找不到的。因此,还要有一个功能,或者说还要对外提供一项服务,是定义最早的起始日期的。

SUB PovideSetFurthestDataDate(ByVal datadate As String)

我并不想在程序里利用Sql语句来实现这个功能,所以,还需要在数据库上建立这个存储过程。建这个存储过程时,就需要使用事务了。

到了这里,总结有如下函数:

FUNCTION ProvideAllInformations(ByVal regionalCodeDate As String) As DataTable

OVERRIDABLE SUB ProvideUpdateDatabase(ByVal ds As DataSet)

SUB PovideSetFurthestDataDate(ByVal datadate As String)

数据库还要建立一个存储过程。

(英文掉光了,用时很是难受)

说了一大通,还有的:

项目环境的考虑。

方案中数据服务器、数据库名称非指定的,用户登录方式也有两种。

现在可以告一段落了。

下一篇,行政区划程序的设计(八),RegionalCodeLibary项目的编码。

 

本文地址:http://www.45fan.com/a/question/69440.html
Tags: 程序 行政区划 Author
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部