C# C显示从数据库表到DataGrid的所有行
我已经搜索了一段时间关于如何 显示表中的多行或所有行。我举了很多例子 我发现我很难正确地执行它 因为数据库连接和查询字符串 我使用自己的数据库类和预制查询函数。因此,在我的表格中,我有:C# C显示从数据库表到DataGrid的所有行,c#,mysql,database,datagrid,C#,Mysql,Database,Datagrid,我已经搜索了一段时间关于如何 显示表中的多行或所有行。我举了很多例子 我发现我很难正确地执行它 因为数据库连接和查询字符串 我使用自己的数据库类和预制查询函数。因此,在我的表格中,我有: userInfo = searchBox.Text; string dateResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "date", "username", userInf
userInfo = searchBox.Text;
string dateResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "date", "username", userInfo, true);
string ipResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "ip", "username", userInfo, true);
string userResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "username", "username", userInfo, true);
string hwidResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "hwid", "username", userInfo, true);
string pcResult = Database.databaseAccess.GetColumnData(HLlib.ValueType.VALUETYPE_STRING, userInfo, "pcname", "username", userInfo, true);
userInfo是一个文本框,包含正在搜索的名称表
获取该格式数据的函数如下所示:
public string GetColumnData(ValueType valueType, string tableName, string col, string colTwo, string equalsVal, bool compare)
{
MySqlConnection connection = null;
MySqlDataReader dataReader = null;
string colData = "";
try
{
string query = "";
if (compare)
query = "SELECT `" + col + "` FROM `" + tableName + "` WHERE `" + colTwo + "`='" + equalsVal + "';";
else
query = "SELECT `" + col + "` FROM `" + tableName + "`";
using (connection = new MySqlConnection(Hash.RunDecryption()))
{
using (MySqlCommand command = new MySqlCommand(query, connection))
{
connection.Open();
command.CommandText = query;
using (dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
switch (valueType)
{
case ValueType.VALUETYPE_STRING:
colData = dataReader.GetString(0);
break;
case ValueType.VALUETYPE_INT16:
colData = dataReader.GetInt16(0).ToString();
break;
case ValueType.VALUETYPE_INT32:
colData = dataReader.GetInt32(0).ToString();
break;
case ValueType.VALUETYPE_INT64:
colData = dataReader.GetInt64(0).ToString();
break;
}
}
if (dataReader.NextResult())
{
colData = "";
while (dataReader.Read())
{
switch (valueType)
{
case ValueType.VALUETYPE_STRING:
colData = dataReader.GetString(0);
break;
case ValueType.VALUETYPE_INT16:
colData = dataReader.GetInt16(0).ToString();
break;
case ValueType.VALUETYPE_INT32:
colData = dataReader.GetInt32(0).ToString();
break;
case ValueType.VALUETYPE_INT64:
colData = dataReader.GetInt64(0).ToString();
break;
}
}
}
}
}
}
}
catch
{
System.Windows.Forms.MessageBox.Show("Failed to retrieve data!", "Error!", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
dataReader.Close();
CloseConnection(connection);
}
finally
{
dataReader.Close();
CloseConnection(connection);
}
return colData;
}
现在已经解释了,我要做的是显示所选表中的每一行
从下到上,或按日期排序,一列显示日期/时间
我已经将我的列添加到DataGrid中,它们是:日期、ip、uid、hid、pname
与数据库表中的格式相同
有人能帮我举个例子说明如何正确执行吗?只需在查询字符串的末尾添加以下内容:
ORDER BY date DESC
使用Ado.net,您还可以在客户端上处理数据。如果表不太大,可以将其内容加载到Datatable中。然后,您可以使用DataView或Datatable功能来选择特定的行。Datatable可以像DB引擎一样使用过滤器执行选择。查看MSDN上的ado.net datatable对象引用我终于找到了一种使用它的方法,我不知道为什么我以前没有尝试过 我的整个问题只是试图打开连接以便打印数据。 以这样的工作结束:
userInfo = searchBox.Text;
MySqlConnection connection = null;
string query = "SELECT * FROM " + userInfo + " ORDER BY date DESC;";
userGrid.Rows.Clear();
using (connection = new MySqlConnection(Hash.RunDecryption()))
{
using (MySqlCommand command = new MySqlCommand(query, connection))
{
connection.Open();
userGrid.DataSource = null;
DataSet dt = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(command);
da.Fill(dt);
userGrid.DataSource = dt.Tables[0];
connection.Close();
}
}
感谢所有帮助过我的人,特别是order by date,这很有帮助,尽管我仍在寻找如何将所有行打印到datagrid,而不仅仅是最后一行。如果您的查询是正确的,那么如果您指定的条件满足多行,它将打印所有行。直接在MySQL上执行,并检查此查询返回多少行以获取更多信息。您是如何执行查询的?结果存储在什么位置?如果您填写一个数据表,这似乎很简单,但听起来您使用的是某种自定义对象?我编辑了我的问题,并添加了用于从数据库获取数据的查询函数。结果出现在上面的字符串中,这些字符串包含了信息。使用DataTable是一件痛苦的事情,因为它要求您使用SqlCommand,而SqlCommand不能从我用于全局功能的数据库类中正确执行。使用来自它的单个查询很烦人。我只是想找到一个简单的填充示例,说明如何使用我的db classGood设计来抽象命令对象,等等,甚至数据库对象。那么,连接到哪个数据库就无关紧要了。我仍然不明白DataTable是如何要求SqlCommand的。它可能是一个适配器。填充。。。