图表 COUNT 查询 C#?

Posted

技术标签:

【中文标题】图表 COUNT 查询 C#?【英文标题】:Chart COUNT Query C#? 【发布时间】:2021-05-17 00:47:37 【问题描述】:

对 C# 有点陌生,我对我在学校作业代码中遇到的这个问题有点困惑。尝试在 winform 中为学校项目制作房间活动图表,其中我输入的 SQL COUNT 查询对事件列下具有值“房间活动”的行进行计数,但由于某些奇怪的原因,我收到 ArgumentException 未处理错误提示我找不到名为“事件”的列。

我的代码做错了什么?

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Configuration;
using System.Data.SqlClient;




namespace Database_Chart_test

    public partial class Form1 : Form
    

        string strConnectionString = ConfigurationManager.ConnectionStrings["Database_Chart_test.Properties.Settings.LibrarySystemConnectionString"].ConnectionString;


        public Form1()
        
            InitializeComponent();
        

        private void Activitychart_Click(object sender, EventArgs e)
        

        

        private void RoomChart()
        
            SqlConnection con = new SqlConnection(strConnectionString);
            DataSet ds = new DataSet();
            con.Open();
            SqlDataAdapter adapt = new SqlDataAdapter("SELECT COUNT(*) FROM Log WHERE Event = 'Room Activity'", con);
            adapt.Fill(ds);
            Activitychart.DataSource = ds;

            Activitychart.Series["WithActivity"].XValueMember = "Event";
            Activitychart.Series["WithActivity"].YValueMembers = "Event";
            con.Close();
        

        private void Form1_Load(object sender, EventArgs e)
        
            // TODO: This line of code loads data into the 'librarySystemDataSet1.RoomsBooking' table. You can move, or remove it, as needed.
            this.roomsBookingTableAdapter.Fill(this.librarySystemDataSet1.RoomsBooking);
            // TODO: This line of code loads data into the 'librarySystemDataSet.Log' table. You can move, or remove it, as needed.
            this.logTableAdapter.Fill(this.librarySystemDataSet.Log);
            RoomChart();
        
    

【问题讨论】:

您是否验证了Event 列存在于Log 表中?你能分享一下这张桌子是什么样子的吗? Event 列确实存在于日志表中。尽管它告诉我它不存在。 CREATE TABLE [dbo].[Log] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Event] VARCHAR (50) NOT NULL, [StartTime] DATETIME NOT NULL, [EndTime] DATETIME NOT NULL, [User] VARCHAR (50) NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); 【参考方案1】:

SELECT COUNT(*) FROM Log WHERE Event = 'Room Activity'执行后,会返回一个1列1行的表(计数)。

查询结果:

所以ArgumentException的原因是ds.Tables[0]中没有名为Event的列。

如果您想获得count,只需致电ExecuteScalar Method

using (SqlConnection conn = new SqlConnection(strConnectionString))

    string strSQL = "SELECT COUNT(*) FROM Log WHERE Event = 'Room Activity'";
    SqlCommand cmd = new SqlCommand(strSQL, conn);

    conn.Open();
    int count = (int)cmd.ExecuteScalar();
    // add data point
    Activitychart.Series["WithActivity"].Points.AddXY("Event", count);
    Console.WriteLine("The count is 0", count);

此外,根据您提供的代码,您正在尝试将Event(a string) 用作YValueMembers。这似乎不合理。一般YValueMembers应该是数字类型。

【讨论】:

哦,我明白了。非常感谢您解释我做错了什么,代码中实际发生了什么。 虽然我很好奇,是否可以有过滤掉ds.Table数据的功能? @Spartan889 好吧,这个:DataView.RowFilter Property 对你有帮助吗?

以上是关于图表 COUNT 查询 C#?的主要内容,如果未能解决你的问题,请参考以下文章

查询图表

Grafana 图表按天或月分组?

并非所有Xaxis标签显示在绑定数据集的图表控件上

每个工作班次 C# .NET WindowsForm 客户端控件的生产摘要图表

SQL 准备数据以显示图表

Google Data Studio:如何使用自定义 Big Query 查询创建时间序列图表