近期想写一个编程助手类的软件,希望用它来自动生成程序代码,为什么有这样的想法呢,这还得从自己每天的工作说起。做程序设计,总免不了写很多程序代码,写多了就会发现有很多工作是重复,一来工作重复,二来浪费了不必要的时间。其实我这个想法在几年前就出现。记得几年前做ASP代码设计时,找到一个软件叫ASP代码助手,可以自动生成一些重用的代码,减少了很多代码的书写工作,很是方便。虽然,有人说碰到代码重复时,可以写一些重用的DLL类来调用,但是,并不是所有代码都可以写成公用类的,而且写类本身也是一件麻烦的事情。
观察项目中的代码发现,一些变量的定义、赋值代码可以自动生成,另外,一些数据的操作,如添加、修改和删除等代码也可以用生成的方法实现。特别让我感兴趣,很希望实现的是对SQL语句的组合操作,我认为也应该可以实现,这似乎和数据表关系图设计类似,例如我们用过一些数据库设计软件,它们根据主从表的关系自动生成SQL查询语句,拖曳表之间的字段自动生成关联。但是,要实现数据表关系图功能对我现有水平来讲是很困难的,因此,我想到了一个折中办法,那就是通过DATATABLE来实现。
我希望先实现数据表关联代码的生成,于是,我简单做了一个例子,很快我就碰到了一些困难。
1.要连接数据库,数据库会分几种,我准备定义三种,oracle、sql server、access,因此针对不同的数据库我需要写三个数据库操作类
2.怎么得到数据库中所有的表、视图信息。
下面是实现的代码:
Private Function GetSchemaTable(ByVal connection As Data.OleDb.OleDbConnection, ByVal Type As String)
' 获取数据表列表
'Type 有:"TABLE,VIEW,ACCESS TABLE,SYSTEM TABLE",Type = Type.ToUpper
Dim table_list As Data.DataTable
table_list = connection.GetOleDbSchemaTable(Data.OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, Type})
Return table_list
End Function
3.怎么获得某个表的字段信息(如字段名、类型、大小和描述)
下面是实现的代码:Private Function GetSchemaTableColums(ByVal connection As Data.OleDb.OleDbConnection, ByVal tablename As String)
Dim table_list As Data.DataTable
table_list = connection.GetOleDbSchemaTable(Data.OleDb.OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, tablename, Nothing})Return table_list
End Function表中的字段名、类型和描述分别对应的名称是"Column_Name", "Data_Type", "Description"。取的表的主键信息:table = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, null)
要注意的是类型获得是个数值,需要转换成对应英文描述或中文描述,因为我写了一个转换的函数。Private Function gettypename(ByVal data_type As Integer) As String
Dim data_typename As String = ""
Select Case (data_type)
Case 2
data_typename = "Int"
Case 3
data_typename = "Int"
Case 4
data_typename = "Single"
Case 5
data_typename = "Double"
Case 6
data_typename = "Decimal"
Case 7
data_typename = "DateTime"
Case 11
data_typename = "Bool"
Case 17
data_typename = "Byte"
Case 72
data_typename = "String"
Case 130
data_typename = "String"
Case 131
data_typename = "Decimal"
Case 128
data_typename = "String"
Case Else
data_typename = "String"
End Select
Return data_typename
End Function
4.另外,我碰到了对DATATABLE取其中部分列的问题,记得之前有看过类似的代码,但已经忘了。
参考:http://yinzhihua2008.blog.163.com/blog/static/794306720121995851705/5.如何隐藏DataGridView中左边黑箭头的那列,而不隐藏其他列。
DataGridView1.RowHeadersVisible = false6.如何全选一行
DataGridView1.SelectionMode = FullRowSelect以上只是今天碰到的问题,明天还要继续。希望早点实现自己需要的功能。
评论