.net从数据库获取数据并在echarts中展示

.net从数据库获取数据并在echarts中展示

一.
做了两天半终于把这个搞定了,翻了好多博客,主要还是这些博客写的挺模糊的,不那么清晰,所以搞了好久。前两天基本什么没干,一直跳不进去success,第三天灵感来了直接搞好了。
从数据库获取数据并在echarts中展示步骤挺简单的,就是实现起来挺麻烦的,主要有以下几步:
1、从数据库获取数据。
2、将数据返回给前端。
3、前端接收数据并绘制柱形图。
1.从数据库获取数据
后台新建一个控制器“echartsController”控制器里写一个连接数据库方法和一个数据库获取数据方法。
代码:
private DataTable GetDataTable(string sql)
{
//连接数据库
string config = @“Data Source=localhost;Initial Catalog=company;User ID=sa;Password=123”;
try
{
using (SqlConnection conn = new SqlConnection(config))
{
//打开数据库连接
conn.Open();
}
}
catch (Exception ex)
{
this.Response.Write(“”);
}
//创建SqlDataAdapter对象并执行sql语句
SqlDataAdapter sda = new SqlDataAdapter(sql, config);
DataTable dt = new DataTable();
//将数据填充到数据表中
sda.Fill(dt);
dt.Dispose();
return dt;
}
2.从数据库获取数据并返回json格式
代码:
public JsonResult GetCharts()
{
ArrayList xAxisData = new ArrayList();
ArrayList yAxisData = new ArrayList();
System.Data.DataTable dt = new System.Data.DataTable();
var table = GetDataTable(“select 员工姓名,总工资 from dbo.test”);//此处是sql语句
for (int i = 0; i < table.Rows.Count; i++)
{
yAxisData.Add(table.Rows[i].ItemArray[1]);//提取出我们要的部分存入到数组中
xAxisData.Add(table.Rows[i].ItemArray[0]);
}
var result = new
{
name = xAxisData,
num = yAxisData
};
return Json(result,JsonRequestBehavior.AllowGet);//返回JSON数据
}

后端完整代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.Collections;
using System.Data;

namespace WebApplication1.Controllers
{

    public class echartsController : Controller
    {
        // GET: echarts
        public ActionResult Index()
        {
            return View();
        }
        /// <summary>
        /// 获取数据并返回到前端
        /// </summary>
        /// <returns></returns>
        public JsonResult GetCharts()
        {
            ArrayList xAxisData = new ArrayList();
            ArrayList yAxisData = new ArrayList();
            System.Data.DataTable dt = new System.Data.DataTable();
            var table = GetDataTable("select 员工姓名,总工资 from dbo.test");//此处是sql语句
            for (int i = 0; i < table.Rows.Count; i++)
            {
                yAxisData.Add(table.Rows[i].ItemArray[1]);//提取出我们要的部分存入到数组中
                xAxisData.Add(table.Rows[i].ItemArray[0]);
            }
            var result = new
            {
                name = xAxisData,
                num = yAxisData
            };      
            return Json(result,JsonRequestBehavior.AllowGet);//返回JSON数据

            
        }
        /// <summary>
        /// 连接数据库方法
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <returns></returns>
        private DataTable GetDataTable(string sql)
        {
            //连接数据库
            string config = @"Data Source=localhost;Initial Catalog=company;User ID=**;Password=***";
            try
            {
                using (SqlConnection conn = new SqlConnection(config))
                {
                    //打开数据库连接
                    conn.Open();
                    
                }
            }
            catch (Exception ex)
            {
                this.Response.Write("<script language='javascript'>alert('连接失败!')</script>");
            }
            //创建SqlDataAdapter对象并执行sql语句
            SqlDataAdapter sda = new SqlDataAdapter(sql, config);
            DataTable dt = new DataTable();
            //将数据填充到数据表中
            sda.Fill(dt);
            dt.Dispose();
            return dt;
        }
    }
}

3.前端获取数据
前端通过ajax获取数据并存到数组里
在这里插入图片描述

4.使用echarts绘制柱状图
这部分最难得就是获取数据,获取到数据再绘制就挺容易的了。从网上找个柱状图模板然后改改数据。

前端完整代码:

<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>ECharts</title>
        <!-- 引入 echarts.js -->
        <script src="~/Scripts/jquery-1.10.2.js"></script>
        <script src="~/Scripts/echarts.min.js"></script>
        <script src="~/Scripts/echarts.js"></script>
        <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    </head>
    <body>
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style="width: 600px;height:400px;"></div>
        <script type="text/javascript">      
                    var objsx = [];
                    var objsy = [];
                            $.ajax({
                                type: "post",
                                async: false,
                                url: "/echarts/GetCharts",   
                                data: { },
                                dataType: "json",                          
                                error: function (errorMsg) { alert(errorMsg); },
                                success: function (result) {
                                    for (var i = 0; i < result.num.length; i++) {
                                        objsy[i] = JSON.parse(result.num[i]);//以特定的JSON的格式接收数字;           
                                        objsx[i] = result.name[i];//以JSON的方式接收字符串
                                    }
                                        var myChart = echarts.init(document.getElementById('main'));
                                        var option =
                                            {
                                                title: {
                                                    text: '工资表'
                                                },
                                                tooltip: {},
                                                legend: {
                                                    data: ['员工']
                                                },
                                                xAxis: {
                                                    // data: objsx
                                                    type: 'category',
                                                    data: objsx
                                                },
                                                yAxis: {
                                                    type: 'value'
                                                },
                                                series: [{
                                                    name: '薪资',
                                                    type: 'bar',
                                                    data: objsy
                                                }]
                                            };                                    
                                        // 使用刚指定的配置项和数据显示图表。
                                        myChart.setOption(option);
                                    }                       
                            });
        </script>
    </body>
</html>

数据库样式:
在这里插入图片描述
结果图
在这里插入图片描述

这也是我第一次用ajax来实现从前端获取数据,代码什么的可能还能简化吧,但是对我来说实现了就是最好的。
二.遇到的问题
实现过程中自然是遇到了很多问题。
1.从数据库获取数据这些都还好,主要是要把数据返回成json格式,
在这里插入图片描述
最后调试result是这样就表示获取成功。这个方法是从前台ajax的url跳进来的。
在这里插入图片描述
2.之前一直进不去ajax的success,后来有博客说是格式设置有问题把datatype:”json”换成datatype:”text”,这样是能进去了,但是我要json的啊,所以应该不是这个问题,但是我知道了是格式的问题,然后再调试发现返回的不是json格式,多了一部分…
在这里插入图片描述
这部分是我验证数据库连接成功的输出内容,然后我就把这部分删了。再进去就能进到successon里了。本来还想连接成功弹出个框提示一下,终究还是错付了。
这样的话错误的提示框应该也是弹不出提示框的,好在连接成功没进到错误提示框。
在这里插入图片描述
这样就是对的了。
3.提示object Object
这就是没有将数据转换成json格式
Success后的方法关键是获取后台数据,要转换成json格式数据,不过我返回的就是json格式的,忘了哪一步报这个错了,反正就是不是json格式,emmmm…应该是上一个错误也报了这个错。
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值