本帖最后由 rockage 于 2015-12-28 20:07 编辑
首先是历史,在ado时代,传统意义上的客户端->服务器模式是由客户端发起一个数据请求,然后全部由服务器运算后返回结果,这样的做的缺点是服务器及其带宽的负担巨大。随着网络化的发展,网络系统的规模也越来越大,海量的数据请求让数据服务器不堪重负,旧的模式已经无法满足新的需求。在这种状况下,.Net数据库平台提出了一种新的概念,简单而言,就是将一部分以往需要在服务器端运行的工作转移到了由DataSet对象提供了一个离线的数据源上进行处理,这样就减轻了数据库以及带宽的负担。
基于这种设计理念,.Net程序可以不需要引用任何数据库实体而享受数据库的大部分功能,这些虚拟的临时数据库只存在于内存里,而不是真的需要一个.mdb文件或是SQL服务器,非常轻量级,也很清爽。比如说你现在要把一些本地数据进行排序,那么你不需要编写任何排序算法,而将数据灌注到一个虚拟的“表”里,然后再Order By就行了,又或者,一些数据你需要查询,也可以用到Select,这比你自己亲自去设计一个查询算法要容易太多了,这类查询算法往往并不好写,特别是模糊查询。甚至,运用LInq还允许编写代码以数据库相同的方式操作内存数据(比如对一个String变量进行Select查询而根本不需要任何“数据库”支持)
方法:
'创建一个数据表,注意跟以往不同的是,这个地方没有引用任何数据库的connection,比如说Access或SQ
Dim t_out As DataTable
t_out = New DataTable("rockage_out") ‘生成一个名为rockage的表
t_out.Columns.Add("name", System.Type.GetType("System.String")) '创建第一列
t_out.Columns.Add("point", System.Type.GetType("System.UInt16")) ‘创建第二列
'通过一个Row对象,向表里填充数据。(ps:MSFlexGrid1是一个老掉牙的表格控件)
For i = 0 To MSFlexGrid1.Rows - 1
Dim pRow As DataRow = t_out.NewRow()
pRow(0) = MSFlexGrid1.get_TextMatrix(i, 1)
pRow(1) = MSFlexGrid1.get_TextMatrix(i, 2)
t_out.Rows.Add(pRow)
Next i
t_out.DefaultView.Sort = "point Desc" '按照point列排序
t_out = t_out.DefaultView.ToTable() '以上只是视图排序,还要将结果回传给表
'--------以下是Select查询的例子:--------------
Dim foundRows() As DataRow
Dim i As Integer
foundRows = t_out.Select("name like '%杨%'")
For i = 0 To foundRows.GetUpperBound(0) '用一个DataRow对象获取Select出来的数据集
Consle.Write foundRows(i)(0) - 1
Next i
.关于程序发布:
a) 项目属性里一定要把签名选项取消,否则会报错。
b) 如果程序里引用了像MSFlexGrid这样的老控件,所以在生成的时候CPU一定不能选x64 ,而只能选择x86。
c )即使是这样,仍然无法在其他没有装.Net 4.6的机器上运行,无论是绿色版还是安装版,都是不能运行报CLR20R3错误,最后发现还是老控件出毛病了,找到MSFLXGRD.OCX文件,32位系统拷贝到\system32下,64位系统拷贝到\SYSWOW64下
d) 然后在命令行下输入:
regsvr32 c:\windows\system32\MSFLXGRD.OCX
或者:
regsvr32 c:\windows\syswow64\MSFLXGRD.OCX
注册了这个控件之后一切正常。
首先是历史,在ado时代,传统意义上的客户端->服务器模式是由客户端发起一个数据请求,然后全部由服务器运算后返回结果,这样的做的缺点是服务器及其带宽的负担巨大。随着网络化的发展,网络系统的规模也越来越大,海量的数据请求让数据服务器不堪重负,旧的模式已经无法满足新的需求。在这种状况下,.Net数据库平台提出了一种新的概念,简单而言,就是将一部分以往需要在服务器端运行的工作转移到了由DataSet对象提供了一个离线的数据源上进行处理,这样就减轻了数据库以及带宽的负担。
基于这种设计理念,.Net程序可以不需要引用任何数据库实体而享受数据库的大部分功能,这些虚拟的临时数据库只存在于内存里,而不是真的需要一个.mdb文件或是SQL服务器,非常轻量级,也很清爽。比如说你现在要把一些本地数据进行排序,那么你不需要编写任何排序算法,而将数据灌注到一个虚拟的“表”里,然后再Order By就行了,又或者,一些数据你需要查询,也可以用到Select,这比你自己亲自去设计一个查询算法要容易太多了,这类查询算法往往并不好写,特别是模糊查询。甚至,运用LInq还允许编写代码以数据库相同的方式操作内存数据(比如对一个String变量进行Select查询而根本不需要任何“数据库”支持)
方法:
'创建一个数据表,注意跟以往不同的是,这个地方没有引用任何数据库的connection,比如说Access或SQ
Dim t_out As DataTable
t_out = New DataTable("rockage_out") ‘生成一个名为rockage的表
t_out.Columns.Add("name", System.Type.GetType("System.String")) '创建第一列
t_out.Columns.Add("point", System.Type.GetType("System.UInt16")) ‘创建第二列
'通过一个Row对象,向表里填充数据。(ps:MSFlexGrid1是一个老掉牙的表格控件)
For i = 0 To MSFlexGrid1.Rows - 1
Dim pRow As DataRow = t_out.NewRow()
pRow(0) = MSFlexGrid1.get_TextMatrix(i, 1)
pRow(1) = MSFlexGrid1.get_TextMatrix(i, 2)
t_out.Rows.Add(pRow)
Next i
t_out.DefaultView.Sort = "point Desc" '按照point列排序
t_out = t_out.DefaultView.ToTable() '以上只是视图排序,还要将结果回传给表
'--------以下是Select查询的例子:--------------
Dim foundRows() As DataRow
Dim i As Integer
foundRows = t_out.Select("name like '%杨%'")
For i = 0 To foundRows.GetUpperBound(0) '用一个DataRow对象获取Select出来的数据集
Consle.Write foundRows(i)(0) - 1
Next i
.关于程序发布:
a) 项目属性里一定要把签名选项取消,否则会报错。
b) 如果程序里引用了像MSFlexGrid这样的老控件,所以在生成的时候CPU一定不能选x64 ,而只能选择x86。
c )即使是这样,仍然无法在其他没有装.Net 4.6的机器上运行,无论是绿色版还是安装版,都是不能运行报CLR20R3错误,最后发现还是老控件出毛病了,找到MSFLXGRD.OCX文件,32位系统拷贝到\system32下,64位系统拷贝到\SYSWOW64下
d) 然后在命令行下输入:
regsvr32 c:\windows\system32\MSFLXGRD.OCX
或者:
regsvr32 c:\windows\syswow64\MSFLXGRD.OCX
注册了这个控件之后一切正常。