图表 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#?的主要内容,如果未能解决你的问题,请参考以下文章