中国石凳联盟 登录注册

【PC 编程】VS2015 初体验

rockage··5 回复·940 浏览

发表回复
本帖最后由 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
注册了这个控件之后一切正常。


点赞0 收藏
本帖最后由 rockage 于 2016-8-4 20:56 编辑

StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Littledot.mdb"
Dim Conn As New OleDb.OleDbConnection(StrConn)
Try
Conn.Open()
Conn.Close()
Catch ex As Exception
MessageBox.Show("连接失败")
End Try

连接本地MDB例子

Dim connString As String = "server=127.0.0.1;Database=test;Uid=root;pwd=505050"
Dim conn As MySqlConnection
Dim dt As DataTable = New DataTable
Dim da As New MySqlDataAdapter
conn = New MySqlConnection
conn.ConnectionString = connString
conn.Open()

这是连接mySQL服务器的例子,前提是先安装MySQL Connector.NET 6.9,然后再到【项目】里【引用】安装路径下的mySQL.dll
点赞0 收藏
本帖最后由 rockage 于 2015-8-3 22:24 编辑

'读取数据流,直接HTTP方式注意TXT文件需要在记事本里另存为UTF8编码,否则是乱码
Dim wc As New System.Net.WebClient
Dim uri As String = "http://stoneren.net/nuan.txt"
Dim stream As Stream = wc.OpenRead(uri)
Dim sr As New StreamReader(stream)
Dim strLine As String = ""
Dim strAll As String = sr.ReadToEnd()
sr.Close()
TextBox1.Text = strAll
---------------------------------------------------------------
'写入数据流,用FTP方式
Dim uriString As String
uriString = http://stoneren.net/nuan.txt
Dim postData As String = "Hello World"
Dim postArray As Byte() = System.Text.Encoding.UTF8.GetBytes(postData)
Dim myWebClient As New System.Net.WebClient
myWebClient.BaseAddress = "ftp://103.254.148.137/public_html"
myWebClient.Credentials = New System.Net.NetworkCredential("username", "password")
uriString = "ftp://103.254.148.137/public_html/nuan.txt"
myWebClient.UploadData(uriString, "STOR", postArray)

小结:对从网上Down下来的数据流进行切割,通过分隔符比如说"#" 和换行符vbCrLf, 将数据再填充进.NET的DataTable里,
通过DataGridView绑定可以方便地进行各种操作,最后将编辑好的Table再合并成为一段数码流Upload到网上即可. 这样的
好处是,服务器不需要特定的数据库支持即可享受数据库的各种好处,缺点是:只局限于小型数据库, 大型数据库用这个方法不太现实.



点赞0 收藏
本帖最后由 rockage 于 2015-8-5 00:38 编辑

DataGridView 跳转到指定行并滚动
DataGridView2.FirstDisplayedScrollingRowIndex = DataGridView2.RowCount - 1
DataGridView2.Rows(DataGridView2.RowCount - 1).Selected = True

设置指定单元格颜色
DataGridView2.Rows(f_rowindex).Cells(0).Style.BackColor = Color.Wheat
DataGridView2.CurrentRow.Cells(1).Style.ForeColor = System.Drawing.Color.Black
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect ‘单击选择整行
DataGridView1.AllowUserToResizeRows = False ‘不允许改变行宽
DataGridView1.AllowUserToResizeColumns = False ’不允许改变列宽
DataGridView1.MultiSelect = False ‘不允许多项选择

’获取当前单元格的数值
DataGridView2.Rows(DataGridView2.CurrentCell.RowIndex).Cells(0).Value.ToString() ‘当前行,列1

‘获取指定单元格的数值DataGridView1.Rows(1).Cells(1).Value.ToString()

’遍历具有“新增”数据功能的DataGridView时是RowCount - 2而不是-1,因为最后一行是空行
For i = 0 To DataGridView1.RowCount - 2
ListBox1.Item.Add (DataGridView1.Rows(i).Cells(0).Value.ToString())
Next



点赞0 收藏
本帖最后由 rockage 于 2015-8-5 03:54 编辑

从剪贴板里获取数据
S = Clipboard.GetText()
将数据输出到剪贴板
Clipboard.SetData("Text", TextBox1.Text)
简单对话框 YES/NO/CANCEL
drResult = MessageBox.Show("需要排序输出吗?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
Select Case drResult
Case
DialogResult.Yes
DialogResult.No
DialogResult.Cancel
点赞0 收藏
读写注册表1,返回或创建一个注册表键

Dim Key1 As Microsoft.Win32.
RegistryKey
Key1 = My.Computer.Registry.
CurrentUser '返回当前用户键
Dim Key2 As Microsoft.Win32.
RegistryKey
Key2 = Key1.OpenSubKey("northsnow")
'返回当前用户键下的northsnow键
If Key2 Is Nothing Then
Key2 = Key1.CreateSubKey("northsnow")
'如果键不存在就创建它
End If
点赞0 收藏
发表回复
发表回复