我声明了两个字符串变量:
string fname;
string lname;
当我在phpMyAdmin数据库中编写MySQL查询语句时:
SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN
project1.order_status ON workers.ID_WORKER = order_status.ID_WORKER
INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER
WHERE orders.ORDER_NUMBER = 'TEST' GROUP BY workers.FNAME, workers.LNAME
我有2个工人:
- "Adam Gax" 和
"Andrew Worm"
然后我想从这个查询中存储对象,并将数据加载到datagridview:
string query1 = string.Format("SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN project1.order_status " +
"ON workers.ID_WORKER = order_status.ID_WORKER INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER " +
"WHERE orders.ORDER_NUMBER = '"+ NrOrder +"' GROUP BY workers.FNAME, workers.LNAME");
SQLdata.connection.Open();
using (var command = new MySqlCommand(query1, SQLdata.connection))
{
using (var reader1 = command.ExecuteReader())
{
while (reader1.Read())
{
fname = Convert.ToString(reader1[0]);
lname = Convert.ToString(reader1[1]);
}
}
}
我已经把while循环中的代码行分解成断点,并读取了所有的FNAME和LNAME。然后正确地加载了所有数据。接下来,我想将它们加载到datagridview中。
SQLdata.connection.Close();
sick_leaves x = new sick_leaves();
x.FNAME = fname;
x.LNAME = lname;
return x;
并将它们绑定在一起,就像这样:
sick_leaves a = calculate_sickness_leaves(txt_NrOrder.Text);
cu = calculate_sickness_leaves(txt_NrOrder.Text);
var source = new BindingSource();
source.DataSource = cu;
dataGridView2.DataSource = source;
然后使用来自 Orders.cs 文件的数据:
public class sick_leaves
{
public string FNAME { get; set; }
public string LNAME { get; set; }
}
在datagridview中编译后,我只加载了一个工人:“Andrew Worm”。这应该是两个工人,所以它没有从sql查询中加载所有数据。
现在:如何将所有数据从sql查询加载到datagridview中?有什么建议吗?警告!我需要桌面应用程序的帮助。
编辑
我想保留代码结构来加载数据,因为我想要使用TimeSpan对象计算病假、请假时间。这样写是否可行?
我的代码:
GenerateOrder.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Windows.Forms.DataVisualization.Charting;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Diagnostics;
namespace ControlDataBase
{
public partial class GenerateChartsOfOrders : Form
{
string fname;
string lname;
sick_leaves cu = new sick_leaves();
public GenerateChartsOfOrders()
{
InitializeComponent();
}
public void loaddata2()
{
string connect = "datasource=localhost;port=3306;username=root;password=";
MySqlConnection connection = new MySqlConnection(connect);
connection.Open();
sick_leaves a = calculate_sickness_leaves(txt_NrOrder.Text);
cu = calculate_sickness_leaves(txt_NrOrder.Text);
var source = new BindingSource();
source.DataSource = cu;
dataGridView2.DataSource = source;
connection.Close();
}
private sick_leaves calculate_sickness_leaves(string NrOrder)
{
string query1 = string.Format("SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN project1.order_status " +
"ON workers.ID_WORKER = order_status.ID_WORKER INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER " +
"WHERE orders.ORDER_NUMBER = '"+ NrOrder +"' GROUP BY workers.FNAME, workers.LNAME");
SQLdata.connection.Open();
using (var command = new MySqlCommand(query1, SQLdata.connection))
{
using (var reader1 = command.ExecuteReader())
{
while (reader1.Read())
{
fname = Convert.ToString(reader1[0]);
lname = Convert.ToString(reader1[1]);
}
}
}
SQLdata.connection.Close();
sick_leaves x = new sick_leaves();
x.FNAME = fname;
x.LNAME = lname;
return x;
}
}
}
Orders.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ControlDataBase
{
public class sick_leaves
{
public string FNAME { get; set; }
public string LNAME { get; set; }
}
}
SQLData.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql;
using MySql.Data.MySqlClient;
namespace ControlDataBase
{
class SQLdata
{
public static MySqlConnection connection = new MySqlConnection
("datasource=localhost;port=3306;username=root;password=");
}
}
fname
和lname
定义为表单字段。calculate_sickness_leaves
中,你在while(reader1.Read())
中设置了这些字段的值。calculate_sickness_leaves
返回一个单独的sick_leaves
对象。fname
和lname
将始终包含你的表中最后一行的名和姓。同时,由于问题3,你的DataGridView
将始终显示单个记录。 - Reza Aghaei