Ventuz中读取mysql时的总结
由于项目需要连接数据库,就自己做测试。我下载的是mysql-8.0.15-winx64版本的,安装包找找就有了,里面应该都有具体的安装教程。安装时反正遇见了很多坑,各种小问题,还好都一一解决了。现在项目中数据大部分都是读取数据库,这样便于管理维护,然后Ventuz又是一款实时的交互性展示软件,数据的及时性就显得比较重要,所以懂数据库还是很重要的。
下面进入正题:
直接上代码:
//命名空间
using System;
using Ventuz.Kernel;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data;
using System.Collections.Generic;
//就一个OnMethod1方法
public bool OnMethod1(int arg)
{
//链接字符串
MySqlConnection myconn = new MySqlConnection("Host =localhost;port=3306;Database=gyx;Username=root;Password=Iam021266.+");
//打开链接
myconn.Open();
DataSet ds = new DataSet();
//建立DataTable对象(相当于建立前台的虚拟数据库中的数据表)
DataTable dt;
string str = string.Format("select {0} from {1}", type,table);
// 执行当前操作 ======*****======
MySqlCommand cmd = new MySqlCommand(str, myconn);
cmd.ExecuteNonQuery();
MySqlDataAdapter adp = new MySqlDataAdapter(str, myconn);
adp.Fill(ds);
dt = ds.Tables[0];
//这里面是一个刷新循环,随机赋值,模拟数据库更新效果
for (int i = 0; i < dt.Rows.Count; i++)
{
string st = string.Format("update {0} set {1}=(FLOOR(RAND() * 100)) where id={2}", table, type, i);
// 执行当前操作 ======*****======
MySqlCommand cm = new MySqlCommand(st, myconn);
cm.ExecuteNonQuery();
}
// 注意: ds.Tables[0].Rows.Count == dt.Rows.Count;
//我是利用集合去接收查询到的数据,最开始想利用数组,但是在给数组赋值时,老是出现:缺少get
//访问器的问题,解决不了才用的集合。
//为了方便我用的string类型的,别的类型需要自己去转换
List<string> lis = new List<string>();
//一行一行的循环获取 ,DataRow表示Table中的一行数据
for(int i = 0; i < dt.Rows.Count; i++)
{
lis.Add(dt.Rows[i][0].ToString());
}
//转为数组
A = lis.ToArray();
//关闭链接
//adp.Close();
myconn.Close();
changed = true;
return false;
}
这个是简化版的,下面附上我自己做出来的效果图,可以切换需要查询的数据库,表,列
最后将这些数据附加进柱状图或者别的图形中,再添加一个mover定时刷新就能看到实时改变的图形了。
PS:但是发现一个问题,我同时开cmd 进行查询我的数据库信息,发现我利用cmd查询到的表信息总是比在Ventuz中得到的表信息早一步,不知道是什么原理,希望懂得大神告知我一下,万分感谢!