vs2010上位机与mysql的连接 5C

我把上位机和mysql连起来后,每20ms采集一次数据,程序调试没有错误,但是运行时采集几个数就会提示失败,并且也不是20ms,感觉变成1s了。
void Ca2Dlg::OnStart()
{
// TODO: 在此添加控件通知处理程序代码
RunTimeNumb = 0;
m_RunTime.Format("0");

CTime dt; 
dt=CTime::GetCurrentTime();
UpdateData(0);
SetTimer(0,1000,NULL);
//SetTimer(1,1000,NULL);
SetTimer(2,20,NULL);

}
case 2:
AddDataToLists();
break;
void Ca2Dlg::AddDataToLists()
{
UpdateData(TRUE);

CString local_m_WheelSpeed = m_WheelSpeed.GetBuffer();  

// 创建 MYSQL 对象。  
MYSQL local_mysql;  
// 初始化 MYSQL 对象。  
mysql_init(&local_mysql);  
// 连接数据库  
if(!mysql_real_connect(&local_mysql,"localhost","root","root","test1",3306,NULL,0))  
{  
    AfxMessageBox(_T("connect to database failed!"));  
}  
else  
{  
    //AfxMessageBox(_T("connect to database success!"));  
    // 设置字符集, 使程序支持中文。  设置数据库字符格式,解决中文乱码问题
    mysql_query(&local_mysql, "set names 'gb2312'");  
}  

// 创建 SQL 语句字符串  
CString sql_insert;  
sql_insert.Format("insert into wheel(m_WheelSpeed) values ( \'%s\')",local_m_WheelSpeed);  
// 执行 sql 语句。  
// mysql_query() 的返回值份很多情形, 进行判断使要注意。  
if(mysql_query(&local_mysql,(char*)(LPCTSTR)sql_insert)==0)  
{     
    AfxMessageBox("insert succeed!");     
}else{  
     AfxMessageBox("insert failed!");  
}  
// 关闭 local_mysql 所关联的数据库连接, 一般情况下不用写。  
mysql_close(&local_mysql);  
UpdateData(FALSE); 

}

7个回答

你的代码什么乱七八糟的
case 2:
AddDataToLists();
break;

那么case 1:呢
switch呢。
是不是漏了什么。

数据接收完整么?用串口助手看了么?什么样的数据没有入库,找下规律。

woshi_momomo
woshi_momomo 认同一楼
接近 2 年之前 回复
tyler0318
tyler0318 最好是用多线程来操作
接近 2 年之前 回复
qq_41249513
长腿的叫兽 同意一楼
接近 2 年之前 回复
weixin_41472380
weixin_41472380 同意一楼
接近 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_40568813: 你应该分为两部分调试,一个是只获取数据,不写数据库,看看行不行,一个是每次获取后,只用硬编码的数据入库,而不使用实际的数据,这样,问题可以缩小一半。
接近 2 年之前 回复
qq_40568813
qq_40568813 我没有截取完整的代码
接近 2 年之前 回复

将mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 安装完毕,因百度经验里已经有详细的安装步骤截图,所以在此处不再演示。

关键点:1、mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 这两个软件一定要同一个位数(这里我用32操作举例)。2、mysql-connector-odbc-5.3.4-win32和mysql-essential-5.1.30-win32 安装时如果要修改安装路径,最好只修改C或D盘符,且一定要都安装到一个盘符里。 打开ODBC数据源,我安装的上面两个软件是32位的,而我的电脑是win7 64位,要到C:\Windows\SysWOW64中去打开odbc32.exe,千万不要直接去控制面板--管理工具中打开数据源。如果你上面的两个软件安装的是64位的,那么要到C:\Windows\System32 中去打开odbc32.exe)数据源(ODBC),在用户DSN选项卡中点击“添加”Mysql的操作步骤,经验中也有,在此也不做详细描述。

20ms 的采用别的方案,windows 的时间响应 我记得是40ms。的的事件响应处理不了这么快,需要别的办法,

qq_40568813
qq_40568813 不是吧,我同学做的把存的数据存成txt文件,也是20ms没什么问题,我想学学mysql,就在他的基础上修改下把采集的数据存到mysql里,但是一直没弄利索,改个程序每次都要弄好久,唉~
接近 2 年之前 回复

新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集
vs2010连接mysql数据库
从工具箱向form1窗体上拖一个按钮和datagridview控件,按钮是触发连接数据库获取数据集,按钮的名称为显示,datagridview控件是用于显示数据集内容
vs2010连接mysql数据库
单击解决方案资源管理器中的引用文件夹然后右键选择添加引用,选择浏览后打开mysql.data.dll,这是c#连接mysql数据库的动态库,里面封装了很多常用的操作数据库的方法
vs2010连接mysql数据库
在解决方案资源管理器中的form1.cs的代码中加入using MySql.Data.MySqlClient;这就是代码中的实际引用mysql.data.dll中的内容,有了这个c#就能很方便地操作sql数据库
vs2010连接mysql数据库
在按钮的单击事件中添加如下代码
string str = "Server=127.0.0.1;User ID=root;Password=123456;Database=test;CharSet=gbk;";
MySqlConnection con = new MySqlConnection(str);//实例化链接
con.Open();//开启连接
string strcmd = "select * from user";
MySqlCommand cmd = new MySqlCommand(strcmd, con);
MySqlDataAdapter ada = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);//查询结果填充数据集
dataGridView1.DataSource = ds.Tables[0];
con.Close();//关闭连接
vs2010连接mysql数据库
使用navicat软件在数据库test中新建表user,然后新建两个字段username和password(图中的栏位),navicat软件是mysql的图形化界面工具,负责新建表以及备份等数据库操作,直观地通过界面来操作
vs2010连接mysql数据库
数据库建好后就可以执行工程了,单击显示按钮执行结果如下,出现username和password说明数据库连接成功,由于没有添加数据所以下面为空
vs2010连接mysql数据库
经验内容仅供参考,

qq_40568813
qq_40568813 我是要做一个上位机采下位机的数据,你这个好像不太合适,不过还是很感谢
接近 2 年之前 回复

有可能是时间上的问题,20ms的时间是否是已经确定了,无法修改!!而且window反应的时间也不是这么短,建议修改一下时间

最好是用多线程来操作.20MS时间够短了。

开两个线程,每个线程里跑一个while,周期分别定1s和20ms,用windows精准定时那个思路。settime的定时器不准的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐