C#与mysql做ASP.NET网页数据库查询速度测试
两种方法是:1,使用mysql数据库的存储过程;2,C#编码,做网页后台与mysql数据库连接,前台测试显示测试过结果
下面我将分别讲解两种方法的具体实现。
1,使用mysql数据库的存储过程插入万条大批量记录。(环境:mysql5.0,GUI(SQLyog),win7专业版,表student{ID,studentname,studentID,GetMAN,dateTim})查询测试的难点是构建数据库,怎样才能向数据库中放入80W条记录呢?当然不能一条一条的放了,首先我考虑的是采用纯数据库方法,写个循环,将记录插入数据库中,在开始的时候,我不知道应该在存储过程中写循环,因此老是报错(sql语句面板执行不成功)。后来在网上看帖,才知道大批量向数据库写数据只有两种方法(一是调用sql的存储过程实现,另一个是使用其他编程语言实现),单纯在sql语言面板中是无法实现的,于是我考虑采用存储过程(因为其他编程语言涉及到后台与数据库的交互和前台的显示,我自己认为不擅长,后来事实证明自己比自己想的要强许多,所以大学未出来的同胞,相信自己大学所做过的事,总有一天会发现经历的是比宝贵的财富,只要认真踏实过,不必妄自菲薄,加油!)。使用存储过程的方法其实挺简单的,但是我出现的错误主要是语法上的错误,下面我将存储过程的代码贴上,供大家参考:
DELIMITER $$
USE `work`$$
DROP PROCEDURE IF EXISTS `cc`$$
CREATE PROCEDURE `cc`( )
BEGIN
DECLARE pid INT; //声明将要使用的变量,末尾有分号
SET pid = 1; //为变量赋值,末尾有分号
WHILE (pid<20000) DO //循环语句,2W条记录,,末尾无分号
INSERT INTO student VALUE(pid,"a",pid,"father",2014-02-07); //单挑插入语句,使用变量pid,末尾有分号
SET pid =pid +1; //设置变量值加一,末尾有分号
END WHILE; //循环条件达到后,结束循环,末尾有分号
END$$
DELIMITER ;
以上是放入两万条记录的代码,特别提醒的是注意其中的分号,有的语句需要添加分号,不然会报错,我的就是在那insert语句后忘了分号,错误耽误了许久时间,不过后来不知道怎么给发现了。然后需要大家注意的是另一个错误“duplicate entry XXXXXXX”,那是因为数据库中有相同的数据了,所以调用存储过程插入数据时,会显示上面那个,意思是字段重复,解决方法是删除数据库中已有的数据,重新插入。我是删除了所有的数据从头开始插入的,我想添加过程中不再添加已有的数据也能解决上述问题(有待实践)。我写的代码是上面上色的部分,下面我将在mysql的GUI(SQLyog)上,创建存储过程的部分详述。菜单栏中,对象->存储过程->创建存储过程,将打开一个存储过程,在相应部分添加自己的有效代码即可完成代码部分,然后命名cc(我以cc命名)保存。使用存储过程时,在sql语言面板中, CALL cc() ,执行即可 。如果想添加更多记录到数据库,只需修改循环中的变量(pid)即可。其中关键是如何插入大批量数据困扰了我,实际上是存储过程的语法难住了很久。到此mysql数据库添加大批量记录的存储过程方法总结完毕。挺简单的吧!
2,C#编码,做网页后台与mysql数据库连接,前台测试显示测试过结果。(环境:VS2010,C#,网页开发,mysql5.0,表student{ID,studentname,studentID,GetMAN,dateTim}) 当准备使用编程语言实现mysql数据库查询测试时,我使用了C#,因为以前上过C#的4周课程,而且小组长也让我再熟悉一下C#的开发。首先,我觉得麻烦的是和数据库相连的数据访问层的实现,然后是表现层的各种控件功能都不熟悉,逻辑层主要是数据库操作的语言sql,逻辑层不太难,但是将其与不熟悉的表现层控件和数据库融合是件痛苦的事情。我想可以先从表现层做起,拖拉控件比较简单。于是创建了一个C#的ASP.NET网页工程(命名为studentMan,)。工程默认有个登陆界面,要求输入用户名和密码,那么思路是:必须有个用户名和密码的判断函数,错误还需要返回错误提示,正确则跳转到数据库操作页面。因此登陆按键添加了一下代码:
...
string strusername = LoginUser.UserName.ToString();
string strpassword = LoginUser.Password.ToString();
if (strusername == "user" && strpassword == "123")
{
Response.Redirect("~/BLL/sqlfind.aspx");
}
else
{
Response.Write("用户名或密码错误1");
}
...
其中温习到了Response,Redirect响应客户端请求,跳转到指定页面,Write响应客户端请求,写信息到客户端。
现在工程能在用户名密码正确时跳转到空的web页面(sqlfind.cs),然后思路是设计好表现层的控件,经过删改,最后留下了表现层的web界面如下:
然后需要完善各个控件的操作,那么需要涉及到对数据库的操作,现在必须完善数据访问层了,我增加了DAL文件夹,下面增加了DBdata,.cs文件。下面解析该文件的内容。数据库操作,首先需要连接并打开数据库,然后可以增删改查。关键的代码解析乳如下:
private string database = "work";
private string datasource = "10.167.27.93"; //这是数据库所在机器的ip,即我的本机IP
private string userid = "root"; //我的mysql数据库哟没那个湖,用户名
private string password = "111111"; //root用户对应的密码
private string portid = "3306"; //连接使用的端口
private string strConnectHost = string.Empty;
private MySqlConnection myconnection; //数据库连接实例
private MySqlCommand mycommand; //数据库命令的操作实例
...
strConnectHost = string.Format(@"Database = {0}; Data Source = {1}; User ID = {2}; Password = {3}; CharSet = utf8; port = {4}",database, datasource, userid, password, portid); //数据库信息
myconnection = new MySqlConnection(strConnectHost); //连接数据库
myconnection.Open();
if (myconnection.State == ConnectionState.Open)
return 0;
...
代码中,学习到了强大的string.Format格式化语句,可以给string传递参数变量,在写insert循环语句部分非常有用,在字串中使用变量改变字串特别有用,本工程中还有插入数据记录,查找前10%数据,后10%数据,倒数第一个数据时用到了string.Format。然后数据库信息绑定到字串中,连接数据库,打开数据库,只需调用相应函数即可完成。
下面以部分代码讲解数据库打开后的操作问题,代码如下:
...
ConnectMysql(); //连接并打开数据库
if (myconnection.State == ConnectionState.Open) //判断是否连接成功
{
mycommand = myconnection.CreateCommand(); //创建命令实例
mycommand.CommandText = strSQL; //为命令添加SQL语言字串
mycommand.ExecuteNonQuery(); //执行命令
myconnection.Close(); //关闭连接
return 0;
}
...
到此,简单的数据库操作已经写好,有点是从数据库连接打开到操作,几个简短的函数就可以搞定,确定是没有错误收集系统,因为仅限于自己的数据库查询测试,所以错误处理方面已经省略,正规项目中错误处理机制很重要。在这段代码中,我犯的错误时少了一句执行命令的语句,因此测试时能知道数据库连接上,但是增删操作无效,后来思考,添加了上了mycommand.ExecuteNonQuery(); 。
下面是统计数据库中记录条数的方法:
...
int count=0;
if (myconnection.State == ConnectionState.Open)
{
mycommand = myconnection.CreateCommand();
mycommand.CommandText = "select *from student";
MySqlDataReader read = mycommand.ExecuteReader();
while (read.Read())
{
count++;
}
return count;
}...
学习到了MysqlDataReader,read()为每条记录执行相同操作,我利用为每条语句执行"select *from student"获得数据库总的记录数。
数据访问层差不多了,下面进入逻辑层的设计,在sqlfind.aspx.cs中,要实现界面中提示的控件所要展示的功能,需要在相应控件下填上处理代码:
protected void btnselect_Click(object sender, EventArgs e)
{
DateTime time1 = DateTime.Now;
string sqlstring;
if (drplist.Text.ToString() == "第一条记录")
{
db.sql_database("select *from student where ID=0");
Response.Write("select *from student where ID=0");
}
...
DateTime time2 = DateTime.Now;
TimeSpan time = time2.Subtract(time1);
txtbox.Text = time.ToString();
}
上述代码中需要学习到了DateTime ,TimeSpan类,time1和time2分别获取数据库操作的起始时间和结束时间,time经过subtrat获得操作前后的时间差,在控件txtbox中,显示操作用的时间。
(原创由呆萌小码制作,由IBC论坛搬家到博客园,欢迎转载)
C#与mysql做ASP.NET网页数据库查询速度测试的更多相关文章
- 经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定 ...
- mysql处理大数据量的查询速度究竟有多快和能优化到什么程度
mysql处理大数据量的查询速度究竟有多快和能优化到什么程度 深圳-ftx(1433725026) 18:10:49 mysql有没有排名函数啊 横瓜(601069289) 18:13:06 无 ...
- 给mysql添加一个只有某个数据库查询权限的用户
添加用户: insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values ("1 ...
- 自定义mysql类用于快速执行数据库查询以及将查询结果转为json文件
由于每次连接数据库进行查询比较麻烦,偶尔还需要将查询结果转为json格式的文件, 因此暂时定义一个mysql的类,将这些常用的方法进行封装,便于直接调用(代码如下,个人用,没写什么注释). 注:导入了 ...
- MySQL 处理海量数据时一些优化查询速度方法
1.应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by设计的列上建立 ...
- 分分钟解决MySQL查询速度慢与性能差
阅读本文大概需要 6 分钟. 一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是“每秒查询率”,是一台服务器每秒能够 ...
- 分分钟解决 MySQL 查询速度慢与性能差
一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的 ...
- 专业解决 MySQL 查询速度慢与性能差!
Java技术栈 ,一般把连接数设置得大一些). 并发量:同一时刻数据库服务器处理的请求数量 3.超高的 CPU使用率:CPU资源耗尽出现宕机. 4.磁盘 IO:磁盘 IO性能突然下降.大量消耗磁盘性能 ...
- 优化SQL Server数据库查询方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
随机推荐
- windows服务
.net windows 服务创建.安装.卸载和调试 原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...
- 【leetcode】Permutations (middle)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- 【leetcode】Rotate List(middle)
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- Odoo误删除服务产品造成的错误解决办法
在Odoo8.0中删除了产品中的服务,会造成工时单模块的安装失败,信息如下所示: ParseError: "null value in column "name" vio ...
- objective-c数组笔记
数组与可变数组 2015年6月14日 1.数组 数组的初始化方式 1.初始化一个空数组 NSArray *array = [[NSArray alloc] init];//不可变数组,数组内不可以添加 ...
- ubuntu下deb包的安装方法
ubuntu下deb包的安装方法 简介 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...
- Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)
,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, , ...
- NYOJ题目198数数
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAK1CAIAAABEvL+NAAAgAElEQVR4nO3drXLkurvv8X0T4bmQYF
- mysqli的增强功能
批量执行sql语句 批量执行dml语句 基本语法 $sqls="sql1.sql2.sql3...." mysqli::multi_query($sqls) 案例: $mysqli ...
- MVC中Form表单的提交
概述 Web页面进行Form表单提交是数据提交的一种,在MVC中Form表单提交到服务器.服务端接受Form表单的方式有多种,如果一个Form有2个submit按钮,那后台如何判断是哪个按钮提交的数据 ...