2013-07-27 37 views
0

我一直在寻找的例子了一段关于如何 显示多个或表中的所有行。我发现很多示例I 让我难以正确执行它 ,因为数据库连接和查询字符串。C#显示从数据库表中的所有行的DataGrid

我使用我自己的数据库类和预制查询函数。所以在我的形式,我有这样的:

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中:date,ip,uid,hid,pname。

格式相同,我在数据库表。

谁能帮我提供有关如何正确地执行这样的例子?

+0

顺序需要更多信息。你如何执行查询?存储结果是什么?看起来像是填充一个DataTable会非常简单,但是听起来你正在使用某种自定义对象呢? –

+0

我编辑我的问题,并添加了我用来从数据库中获取数据的查询函数。结果在上面的字符串中保存信息 – Faded

回答

0

只需在您的查询字符串的结尾补充一点:

ORDER BY date DESC 
+0

这很有帮助,但我仍然在寻找如何将所有行打印到datagrid而不是最后一行 – Faded

+0

您的查询是正确的,它将打印所有行if您指定的条件满足多行。直接在'MySQL'上执行它,并检查这个查询返回多少行 – Shaharyar

0

随着Ado.net你可以在客户端上处理数据,以及。如果你的表不是太大,你可以把它的内容加载到Datatable中。然后,您可以使用DataView或Datatable功能来选择特定的行。 Datatable可以像DB引擎一样执行选择。看看ado.net DataTable对象参考MSDN上

+0

使用DataTable是一个痛苦的屁股,因为它要求你使用SqlCommand,它不能从我用于全局函数的Database类中执行。使用它的单个查询很烦人。我只是试图找到一个简单的填充示例,我如何使用我的db类 – Faded

+0

好的设计是抽象您的命令对象等,甚至数据库对象。那么它不会是你连接到的数据库的问题。我仍然不明白DataTable是如何需要SqlCommand的。它可能是IDataAdapter.Fill ... –

0

我终于想出了一个办法来利用它,我不知道为什么我之前没尝试这个..

我的整个问题只是想打开连接以便打印数据。 结束了这方面的工作:

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(); 
      } 
     } 

感谢所有谁帮助,尤其是日期

相关问题