【问题标题】:Displaying database details on a datagrid在数据网格上显示数据库详细信息
【发布时间】:2014-05-24 17:24:09
【问题描述】:

我正在尝试使用以下方法在数据网格上显示我的数据库详细信息。我能够与数据库建立连接并进行更新,所以一切都很好。只是在进行查询后显示数据有问题。

下面的第一个方法查询进行查询。我正在尝试使用该信息并在单击按钮时调用的第二种方法下运行代码。

我在调用我的查询方法时遇到问题。我的印象是我可以在 adapter.SelectCommand 下调用它,但这会返回一个错误,说“无法隐式转换类型”。如果我错误地运行查询,请提出建议。谢谢。

public MySqlDataReader Query(string queryString)
        {     
            MySqlDataReader reader;
            MySqlCommand cmd2;

            try
            {
                cmd2 = new MySqlCommand(queryString, conn); 
                reader = cmd2.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(reader.GetInt32(0) + " " + reader.GetString(1) + " " + reader.GetDouble(2));
                }
                return reader;
            }
            catch(Exception e)
            {
                Console.WriteLine("Error in query");
                Console.Read(); 
            }
            return null;
        }

private void Button_Retrieve(object sender, RoutedEventArgs e)
        {
            try
            {
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = dataSource.Query("SELECT * FROM PERSONS WHERE Name = 'Sam';");//THis line returns the error
                DataTable dt = new DataTable("PERSONS"); 
                adapter.Fill(dt);
                dataGrid1.ItemsSource = dt.DefaultView;
                adapter.Update(dt);
            } 
            catch (Exception error)
            {
                MessageBox.Show(error.StackTrace);
            }
        }

【问题讨论】:

  • 什么是 dataSource.Query?似乎它没有返回 MySqlCommand。
  • 是上面提到的第一个方法Query()。它在另一个类中,dataSource 是该类的实例,因此以这种方式调用它。
  • 如果我正确获取了您的代码,当您想要将数据读取器放入数据表时,您不需要任何适配器,只需使用数据表中的加载方法,它有一个数据读取器参数。 msdn.microsoft.com/de-de/library/…

标签: c# mysql sql wpf datagrid


【解决方案1】:

您的适配器没有连接

// Assumes that connection is a valid SqlConnection object.
string queryString = 
  "SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

【讨论】:

  • 请回复。 SqlDataAdapter 适配器 = new SqlDataAdapter(queryString, connection);考虑到我已经在 Query 方法中建立了一组重复的代码。试图直接使用 Query 的返回值。
  • 连接(在我的例子中是 conn)与我的 Query 方法位于不同的类中。我只想在我的 mainWindow 类上调用 Query 方法,而不必再次调用 conn。我的 Button_Retrieve 方法在 mainWindow 类中。
  • 你的方法行得通,但就像我说的,我可以通过调用 Query 方法来做到吗? Tnks。
  • 你的适配器哪一部分没有连接不清楚?它不能神奇地使用你没有提供给它的连接。
猜你喜欢
  • 2016-11-24
  • 1970-01-01
  • 2016-10-25
  • 2017-12-16
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
相关资源
最近更新 更多