highcharts联合jquery ajax 后端取数据
Highcharts是一个制作图表的纯Javascript类库,主要特性如下:
兼容性:兼容当今所有的浏览器,包括iPhone、IE和火狐等等;
对个人用户完全免费;
纯JS,无BS;
支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图;
跨语言:不管是PHP、Asp.net还是Java都可以使用,它只需要三个文件:一个是Highcharts的核心文件highcharts.js,还有a canvas emulator for IE和Jquery类库或者MooTools类库;
提示功能:鼠标移动到图表的某一点上有提示信息;
放大功能:选中图表部分放大,近距离观察图表;
易用性:无需要特殊的开发技能,只需要设置一下选项就可以制作适合自己的图表;
时间轴:可以精确到毫秒;
第一个例子:
这个是从后端api取值,后端再从数据库里取值。
为了不让整个页面刷新,用了ajax做局部刷新
- $(function () {
- $(document).ready(function () {
- ////////
- // Mysql Questions
- ////////
- var mysqlQuestionsOptions = {
- chart: {
- renderTo: 'mysql-questions-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'per second'
- }, min: 0
- },
- series: [{
- name: 'Select'
- },{
- name: 'Insert'
- },{
- name: 'Replace'
- },{
- name: 'Update'
- },{
- name: 'Delete'
- }]
- };
- $.ajax({
- url: 'stats/mysql/questions',
- dataType: "json",
- success: function (data) {
- //init series arays
- select_arr = [];
- insert_arr = [];
- replace_arr = [];
- update_arr = [];
- delete_arr =[];
- for (i in data) {
- //build
- var r = data[i];
- select_arr.push([r.ts, r.Select_per_second]);
- insert_arr.push([r.ts, r.Insert_per_second]);
- replace_arr.push([r.ts, r.Replace_per_second]);
- update_arr.push([r.ts, r.Update_per_second]);
- delete_arr.push([r.ts, r.Delete_per_second]);
- }
- //save series
- mysqlQuestionsOptions.series[0].data = select_arr;
- mysqlQuestionsOptions.series[1].data = insert_arr;
- mysqlQuestionsOptions.series[2].data = replace_arr;
- mysqlQuestionsOptions.series[3].data = update_arr;
- mysqlQuestionsOptions.series[4].data = delete_arr;
- var chart = new Highcharts.Chart(mysqlQuestionsOptions);
- },
- cache: false
- });
- ////////
- // Mysql Select Sort
- ////////
- var mysqlSelectSortOptions = {
- chart: {
- renderTo: 'mysql-select-sort-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'per second'
- }, min: 0
- },
- series: [{
- name: 'Select Scan'
- },{
- name: 'Select Range'
- },{
- name: 'Select Full Join'
- },{
- name: 'Select Range Check'
- },{
- name: 'Select Full Range Join'
- },{
- name: 'Sort Scan'
- },{
- name: 'Sort Range'
- },{
- name: 'Sort Merge Passes'
- }]
- };
- $.ajax({
- url: 'stats/mysql/select_sort',
- dataType: "json",
- success: function (data) {
- //init series arays
- select_scan_arr = [];
- select_range_arr = [];
- select_full_join_arr = [];
- select_range_check_arr = [];
- select_full_range_join_arr =[];
- sort_scan_arr =[];
- sort_range_arr =[];
- sort_merge_passes_arr =[];
- for (i in data) {
- //build
- var r = data[i];
- select_scan_arr.push([r.ts, r.Select_scan_per_sec]);
- select_range_arr.push([r.ts, r.Select_range_per_sec]);
- select_full_join_arr.push([r.ts, r.Select_full_join_per_sec]);
- select_range_check_arr.push([r.ts, r.Select_range_check_per_sec]);
- select_full_range_join_arr.push([r.ts, r.Select_full_range_join_per_sec]);
- sort_scan_arr.push([r.ts, r.Sort_scan_per_sec]);
- sort_range_arr.push([r.ts, r.Sort_range_per_sec]);
- sort_merge_passes_arr.push([r.ts, r.Sort_merge_passes_per_sec]);
- }
- //save series
- mysqlSelectSortOptions.series[0].data = select_scan_arr;
- mysqlSelectSortOptions.series[1].data = select_range_arr;
- mysqlSelectSortOptions.series[2].data = select_full_join_arr;
- mysqlSelectSortOptions.series[3].data = select_range_check_arr;
- mysqlSelectSortOptions.series[4].data = select_full_range_join_arr;
- mysqlSelectSortOptions.series[5].data = sort_scan_arr;
- mysqlSelectSortOptions.series[6].data = sort_range_arr;
- mysqlSelectSortOptions.series[7].data = sort_merge_passes_arr;
- var chart = new Highcharts.Chart(mysqlSelectSortOptions);
- },
- cache: false
- });
- ////////
- // Mysql Connections
- ////////
- var mysqlConnectionsOptions = {
- chart: {
- renderTo: 'mysql-connections-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: [{
- title: {
- text: 'per second'
- }, min: 0
- },{
- title: {
- text: 'count'
- }, min: 0,
- opposite: true
- }],
- series: [{
- name: 'Max Connections',
- yAxis : 1, type: 'area'
- },{
- name: 'Max Used Connections',
- yAxis : 1, type: 'area'
- },{
- name: 'Process Count',
- yAxis : 1, type: 'area'
- },{
- name: 'Running Process Count',
- yAxis : 1
- },{
- name: 'Connection Rate',
- yAxis : 0
- },{
- name: 'Aborted connects Rate',
- yAxis : 0
- },{
- name: 'Aborted clients Rate',
- yAxis : 0
- }]
- };
- $.ajax({
- url: 'stats/mysql/connections',
- dataType: "json",
- success: function (data) {
- //init series arays
- connections_arr = [];
- aborted_connects_arr = [];
- aborted_clients_arr = [];
- max_used_connections_arr = [];
- max_connections_arr =[];
- process_count_arr = [];
- running_process_count_arr =[];
- for (i in data) {
- //build
- var r = data[i];
- connections_arr.push([r.ts, r.Connections_per_second]);
- aborted_connects_arr.push([r.ts, r.Aborted_connects_per_second]);
- aborted_clients_arr.push([r.ts, r.Aborted_clients_per_second]);
- max_used_connections_arr.push([r.ts, r.max_used_connections]);
- max_connections_arr.push([r.ts, r.max_connections]);
- process_count_arr.push([r.ts, r.process_count]);
- running_process_count_arr.push([r.ts, r.process_count_non_sleep]);
- }
- //save series
- mysqlConnectionsOptions.series[4].data = connections_arr;
- mysqlConnectionsOptions.series[5].data = aborted_connects_arr;
- mysqlConnectionsOptions.series[6].data = aborted_clients_arr;
- mysqlConnectionsOptions.series[0].data = max_connections_arr;
- mysqlConnectionsOptions.series[1].data = max_used_connections_arr;
- mysqlConnectionsOptions.series[2].data = process_count_arr;
- mysqlConnectionsOptions.series[3].data = running_process_count_arr;
- var chart = new Highcharts.Chart(mysqlConnectionsOptions);
- },
- cache: false
- });
- ////////
- // Mysql Bytes
- ////////
- var mysqlBytesOptions = {
- chart: {
- renderTo: 'mysql-bytes-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'kBps'
- }, min: 0
- },
- series: [{
- name: 'Sent'
- },{
- name: 'Recieved'
- }]
- };
- $.ajax({
- url: 'stats/mysql/bytes',
- dataType: "json",
- success: function (data) {
- //init series arays
- sent = [];
- recieved =[];
- for (i in data) {
- //build
- var r = data[i];
- sent.push([r.ts, r.kBps_sent]);
- recieved.push([r.ts, r.kBps_recieved]);
- }
- //save series
- mysqlBytesOptions.series[0].data = sent;
- mysqlBytesOptions.series[1].data = recieved;
- var chart = new Highcharts.Chart(mysqlBytesOptions);
- },
- cache: false
- });
- ////////
- // Mysql Temp
- ////////
- var mysqlTempOptions = {
- chart: {
- renderTo: 'mysql-temp-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'per minute'
- }, min: 0
- },
- series: [{
- name: 'Created Tmp Disk Tables'
- },{
- name: 'Created Tmp Tables'
- },{
- name: 'Created Tmp Files'
- }]
- };
- $.ajax({
- url: 'stats/mysql/temp',
- dataType: "json",
- success: function (data) {
- //init series arays
- tmp_disk_tables = [];
- tmp_tables = [];
- tmp_files = [];
- for (i in data) {
- //build
- var r = data[i];
- tmp_disk_tables.push([r.ts, r.Created_tmp_disk_tables_per_min]);
- tmp_tables.push([r.ts, r.Created_tmp_tables_per_min]);
- tmp_files.push([r.ts, r.Created_tmp_files_per_min]);
- }
- //save series
- mysqlTempOptions.series[0].data = tmp_disk_tables;
- mysqlTempOptions.series[1].data = tmp_tables;
- mysqlTempOptions.series[2].data = tmp_files;
- var chart = new Highcharts.Chart(mysqlTempOptions);
- },
- cache: false
- });
- ////////
- // Mysql Table Locks
- ////////
- var mysqlTableLocksOptions = {
- chart: {
- renderTo: 'mysql-table-locks-container',
- type: 'spline'
- },
- title: {
- text: '',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'per second'
- }, min: 0
- },
- series: [{
- name: 'Table locks wait'
- },{
- name: 'Table locks immediate'
- }]
- };
- $.ajax({
- url: 'stats/mysql/table_locks',
- dataType: "json",
- success: function (data) {
- //init series arays
- wait = [];
- immediate = [];
- for (i in data) {
- //build
- var r = data[i];
- wait.push([r.ts, r.Table_locks_wait_per_sec]);
- immediate.push([r.ts, r.Table_locks_immediate_per_sec]);
- }
- //save series
- mysqlTableLocksOptions.series[0].data = wait;
- mysqlTableLocksOptions.series[1].data = immediate;
- var chart = new Highcharts.Chart(mysqlTableLocksOptions);
- },
- cache: false
- });
- ////////
- // Mysql Innodb Buffer Pool Usage
- ////////
- var mysqlInnoDBBPOptions = {
- chart: {
- renderTo: 'mysql-innodb-bp-container',
- type: 'area'
- },
- title: {
- text: 'Buffer Pool Usage',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: [{
- title: {
- text: 'MBytes'
- }, min: 0
- },{
- title: {
- text: 'Hit Rate %'
- }, min: 0, max: 100, opposite: true
- }],
- series: [{
- name: 'Buffer Pool Total'
- },{
- name: 'Buffer Pool Used'
- },{
- name: 'Read Hit Rate', type: 'spline', yAxis: 1
- }]
- };
- ////////
- // Mysql Innodb
- ////////
- var mysqlInnoDBOptions = {
- chart: {
- renderTo: 'mysql-innodb-container',
- type: 'spline'
- },
- title: {
- text: 'InnoDB Stats',
- x: -20 //center
- },
- xAxis: {
- type: 'datetime'
- },
- yAxis: {
- title: {
- text: 'per second'
- }, min: 0
- },
- series: [{
- name: 'Buffer Pool Read Request'
- },{
- name: 'Buffer Pool Reads'
- },{
- name: 'Buffer Pool Read Ahead Rnd'
- },{
- name: 'Buffer Pool Read Ahead Seq'
- },{
- name: 'Buffer Pool Write Request'
- },{
- name: 'Buffer Pool Pages Flushed'
- },{
- name: 'Buffer Pool Wait Free'
- },{
- name: 'Row Lock Waits'
- },{
- name: 'Data Reads'
- },{
- name: 'Data Writes'
- },{
- name: 'Data Fsyncs'
- },{
- name: 'Pages Created'
- },{
- name: 'Pages Read'
- },{
- name: 'Pages Written'
- },{
- name: 'Rows Deleted'
- },{
- name: 'Rows Inserted'
- },{
- name: 'Rows Read'
- },{
- name: 'Rows Updated'
- }]
- };
- $.ajax({
- url: 'stats/mysql/innodb',
- dataType: "json",
- success: function (data) {
- //init series arays
- bp_used = [];
- bp_total = [];
- bp_read_ratio = [];
- bp_read_requests = [];
- bp_reads = []
- bp_read_rnd = [];
- bp_read_seq = [];
- bp_write_req = [];
- bp_pages_flush = [];
- bp_wait_free = [];
- row_lock_waits = [];
- data_reads = [];
- data_write = [];
- data_fsyncs = [];
- pages_created = [];
- pages_read = [];
- pages_written = [];
- rows_deleted = [];
- rows_inserted = [];
- rows_read = [];
- rows_updated = [];
- for (i in data) {
- //build
- var r = data[i];
- bp_used.push([r.ts, r.Innodb_buffer_pool_used_mb]);
- bp_total.push([r.ts, r.Innodb_buffer_pool_total_mb]);
- bp_read_ratio.push([r.ts, r.Innodb_buffer_pool_read_ratio]);
- bp_read_requests.push([r.ts, r.Innodb_buffer_pool_read_requests_per_second]);
- bp_reads.push([r.ts, r.Innodb_buffer_pool_reads_per_second]);
- bp_read_rnd.push([r.ts, r.Innodb_buffer_pool_read_ahead_rnd_per_second]);
- bp_read_seq.push([r.ts, r.Innodb_buffer_pool_read_ahead_seq_per_second]);
- bp_write_req.push([r.ts, r.Innodb_buffer_pool_write_requests_per_second]);
- bp_pages_flush.push([r.ts, r.Innodb_buffer_pool_pages_flushed_per_second]);
- bp_wait_free.push([r.ts, r.Innodb_buffer_pool_wait_free_per_second]);
- row_lock_waits.push([r.ts, r.Innodb_row_lock_waits_per_second]);
- data_reads.push([r.ts, r.Innodb_data_reads_per_second]);
- data_write.push([r.ts, r.Innodb_data_writes_per_second]);
- data_fsyncs.push([r.ts, r.Innodb_data_fsyncs_per_second]);
- pages_created.push([r.ts, r.Innodb_pages_created_per_second]);
- pages_read.push([r.ts, r.Innodb_pages_read_per_second]);
- pages_written.push([r.ts, r.Innodb_pages_written_per_second]);
- rows_deleted.push([r.ts, r.Innodb_rows_deleted_per_second]);
- rows_inserted.push([r.ts, r.Innodb_rows_inserted_per_second]);
- rows_read.push([r.ts, r.Innodb_rows_read_per_second]);
- rows_updated.push([r.ts, r.Innodb_rows_updated_per_second]);
- }
- //save series
- mysqlInnoDBBPOptions.series[1].data = bp_used;
- mysqlInnoDBBPOptions.series[0].data = bp_total;
- mysqlInnoDBBPOptions.series[2].data = bp_read_ratio;
- mysqlInnoDBOptions.series[0].data = bp_read_requests;
- mysqlInnoDBOptions.series[1].data = bp_reads;
- mysqlInnoDBOptions.series[2].data = bp_read_rnd;
- mysqlInnoDBOptions.series[3].data = bp_read_seq;
- mysqlInnoDBOptions.series[4].data = bp_write_req;
- mysqlInnoDBOptions.series[5].data = bp_pages_flush;
- mysqlInnoDBOptions.series[6].data = bp_wait_free;
- mysqlInnoDBOptions.series[7].data = row_lock_waits;
- mysqlInnoDBOptions.series[8].data = data_reads;
- mysqlInnoDBOptions.series[9].data = data_write;
- mysqlInnoDBOptions.series[10].data = data_fsyncs;
- mysqlInnoDBOptions.series[11].data = pages_created;
- mysqlInnoDBOptions.series[12].data = pages_read;
- mysqlInnoDBOptions.series[13].data = pages_written;
- mysqlInnoDBOptions.series[14].data = rows_deleted;
- mysqlInnoDBOptions.series[15].data = rows_inserted;
- mysqlInnoDBOptions.series[16].data = rows_updated;
- var chart = new Highcharts.Chart(mysqlInnoDBBPOptions);
- chart = new Highcharts.Chart(mysqlInnoDBOptions);
- },
- cache: false
- });
- });
- });
- $(document).scroll(function(){
- // If has not activated (has no attribute "data-top"
- if (!$('.subnav').attr('data-top')) {
- // If already fixed, then do nothing
- if ($('.subnav').hasClass('subnav-fixed')) return;
- // Remember top position
- var offset = $('.subnav').offset();
- $('.subnav').attr('data-top', offset.top);
- }
- if ($('.subnav').attr('data-top') - $('.subnav').outerHeight() <= $(this).scrollTop())
- $('.subnav').addClass('subnav-fixed');
- else
- $('.subnav').removeClass('subnav-fixed');
- });
第二个例子
这个和前面是一样的方式,这里做了多个引用,也就是可以画多条线路
这个图不是我这的,但下面的代码是行的通的,可以放到一个js里面引用,然后通过ajax传值过去,在前端进行数据的渲染。
- var charts = new Array();
- var serverCount = 6;
- var lastTimes = new Array();
- var max = ${params.int("max")?:120};
- $(document).ready(function() {
- Highcharts.setOptions({
- global: {
- useUTC: false
- }
- });
- for (var i = 0; i < serverCount; i++) {
- charts[i] = new Highcharts.Chart({
- chart: {
- renderTo: 'container' + i,
- type: 'spline',
- events: {
- load: function() {
- // set up the updating of the chart each second
- var series = this.series;
- var serverIndex = i;
- lastTimes[serverIndex] = 0;
- var loadData = function() {
- $.getJSON("http://${request.serverName}:${request.serverPort}${request.contextPath}/toolkits/queryStatistics.gsp", {"lasTime":lastTimes[serverIndex],"proxy":true,"index":serverIndex,"max":max}, function(data) {
- for (var k = 0; k < series.length; k++) {
- for (var j = 0; j < data[k].length; j++) {
- var point = data[k][j];
- var isShift = series[k].data.length >= max;
- console.log("series " + k + ".data.length=" + series[k].data.length);
- var lastTime = 0;
- if (series[k].data.length > 0)
- lastTime = series[k].data[series[k].data.length - 1].x;
- if (point[0] > lastTime)
- series[k].addPoint([point[0],point[1]], true, isShift);
- lastTimes[serverIndex] = point[0];
- }
- }
- })
- };
- loadData();
- setInterval(loadData, 60000);
- }
- }
- },
- title: {
- text: '访问量实时监控'
- },
- xAxis: [
- {
- type: 'datetime',
- tickPixelInterval: 120
- }
- ],
- yAxis: [
- {
- title: {
- text: '总请求/分钟',
- style: {
- color: '#3E576F'
- }
- }
- },
- {
- title: {
- text: '平均响应时间',
- style: {
- color: '#00AA00'
- }
- },opposite:true
- }
- ],
- plotOptions: {
- spline: {
- marker:{
- enabled: false,
- states: {
- hover: {
- enabled: true,
- symbol: 'circle',
- radius: 5,
- lineWidth: 1
- }
- }
- }
- }
- },
- tooltip: {
- formatter: function() {
- return '<b>' + this.series.name + '</b><br/>' +
- Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
- Highcharts.numberFormat(this.y, 2);
- }
- },
- legend: {
- enabled: true
- },
- exporting: {
- enabled: false
- },
- series: [
- {
- name: '总请求数',
- data: []
- },
- {
- name: '错误请求数',
- data: []
- },
- {
- name: '平均响应时间',
- yAxis:1,
- data: []
- }
- ]
- });
- }
- })
highcharts联合jquery ajax 后端取数据的更多相关文章
- jquery ajax返回json数据进行前后台交互实例
jquery ajax返回json数据进行前后台交互实例 利用jquery中的ajax提交数据然后由网站后台来根据我们提交的数据返回json格式的数据,下面我来演示一个实例. 先我们看演示代码 代码如 ...
- 练习 jquery+Ajax+Json 绑定数据 分类: asp.net 练习 jquery+Ajax+Json 绑定数据 分类: asp.net
练习 jquery+Ajax+Json 绑定数据
- Jquery Ajax 提交json数据
在MVC控制器(这里是TestController)下有一个CreateOrder的Action方法 [HttpPost] public ActionResult CreateOrder(List&l ...
- 使用jQuery AJAX读取二进制数据
READING BINARY DATA USING JQUERY AJAX http://www.henryalgus.com/reading-binary-files-using-jquery-aj ...
- jQuery Ajax请求后台数据并在前台接收
1.ajax基本语法 <script> $(function(){ $('#sub').click(function(){ var username=$('#username').val( ...
- Django + JQuery + ajax实时显示数据
1 创建django项目 :Visualization and APP :Demo >>django-admin startproject Visualization >>p ...
- ASP.NET使用EasyUI-DataGrid + ashx + JQuery Ajax:实现数据的增删查改,查询和分页!
转自:http://www.cnblogs.com/lt-style/p/3457399.html 数据表: 学生表:学生编号.姓名.性别.班级编号.年龄 班级表:班级编号.班级名称 开发过程: 1. ...
- jQuery AJAX获取JSON数据解析多种方式示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jquery ajax获取后台数据后无法输出
今天做ajax获取数据,再浏览器的debugger窗口也看到了数据 ajax代码 $('#userSearch').click(function(){ $.get("loadAllUsers ...
随机推荐
- ArrayList、LinkedList、Vector的区别
Arraylist和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标, ...
- 用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...
- Codeforces Round #354 (Div. 2) C. Vasya and String
题目链接: http://codeforces.com/contest/676/problem/C 题解: 把连续的一段压缩成一个数,对新的数组求前缀和,用两个指针从左到右线性扫一遍. 一段值改变一部 ...
- SqlServer Split函数
Create FUNCTION [dbo].[SplitToTable] ( @SplitString nvarchar(max), @Separator nvarchar(10)=' ' ) RET ...
- 【BZOJ】【1050】【HAOI2006】旅行comf
枚举/暴力/Kruskal orz……我sb了……其实是sb题<_< 有一道题问的是最小极差生成树……(不记得是什么名字了,就是求最大边权与最小边权差最小的生成树)做法是枚举最小边,然后k ...
- 《深入浅出JavaScript》
第一章JS入门 第二章数据和判定常用的转义序列\b 回退 \f换页 \n换行 \r回车 \t制表符 \'单引 \"双引 \\反斜乘除求余的优先级相同,从左向右执行string对象indexO ...
- Gitlab仓库规范实践建议
记录一下Gitlab仓库实践信息: 仓库是指一个可以git clone的地址,用于存储某个服务,模块,子系统或某类辅助代码的地方 仓库的visibility level一般设置为Private(访问需 ...
- DevSecOps 简介(一)
DevOps,或者说企业应用开发团队和系统运营团队的合作,已经成为一个时髦的 IT 话题.这一新的运营模式往往与敏捷式软件开发方法并举,同时还会利用云计算的可扩展性--这一切,都是为了使企业更加灵活, ...
- HDU 1548 A strange lift (Dijkstra)
A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...
- 数据库(.udl)简单测试连接
当我们烦于打开数据库进行连接的时候,我们可以用udl进行测试连接,并可以获得连接字符串. 1.新建一个txt文件,然后将后缀改成udl保存. 2.双击打开udl文件. 3.进行数据库连接测试. 4.用 ...