【问题标题】:C# use a reader in another reader solution?C# 在另一个阅读器解决方案中使用阅读器?
【发布时间】:2015-01-27 10:05:41
【问题描述】:

无论如何,我都需要将一些 mysql 数据放入另一个 mysql 阅读器请求中,以解决我显然不能同时打开 2 个阅读器的问题,它最终都会出现在一个数据网格中

    public void DBSelectPraktikanter(object sender)
    {
        string Command = "SELECT * FROM forlob WHERE firmaid = N'" + firmaid + "'";

        MySqlConnection sqlConnection1 = new MySqlConnection(connectionString);
        MySqlCommand command = new MySqlCommand(Command, sqlConnection1);

        sqlConnection1.Open();
        MySqlDataReader reader = command.ExecuteReader();
        var items = new List<praktikanter>();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                string praktikantid = String.Format("{0}", reader["praktikantid"]);

                string Command2 = "SELECT * FROM praktikanter WHERE id = N'" + praktikantid + "'";
                MySqlCommand command2 = new MySqlCommand(Command, sqlConnection1);
                MySqlDataReader reader2 = command.ExecuteReader();
                if (reader.HasRows)
                {
                    while (reader2.Read())
                    {
                        Praktikant = String.Format("{0}", reader["Navn"]);
                    }
                }

                string Fra = String.Format("{0}", reader["fra"]);
                string Til = String.Format("{0}", reader["til"]);

                items.Add(new praktikanter(Praktikant, Fra, Til));
            }
        }

        sqlConnection1.Close();

        var grid = sender as DataGrid;
        grid.ItemsSource = items;
    }

【问题讨论】:

  • 这不是您问题的答案,而是您需要注意的一些问题。您的代码容易受到 SQL 注入的影响。有关更多信息,请参阅此帖子:stackoverflow.com/questions/24547714/…
  • 不清楚你在问什么。出了什么问题?
  • 简而言之(来自重复):启用 MARS,如果您的提供商不支持它,则为第二个数据读取器创建第二个连接...
  • 您是否考虑过在问题中使用句号 (.) 来帮助阅读清晰?不要让我们为您提供帮助变得比需要的更难。

标签: c# mysql


【解决方案1】:

而不是嵌套MySqlCommands 并循环第一个结果集以再次查询数据库以收集所有数据,您应该真正使用一个查询。还可以使用using-statement 来确保即使出现错误也能关闭连接,并使用 sql-parameters 来避免 sql-injection 问题:

var items = new List<praktikanter>();
string sql = @"SELECT p.*, f. Navn 
               FROM praktikanter p INNER JOIN forlob f ON p.id = f.praktikantid
               WHERE f.firmaid = @firmaid";
using (var con = new MySqlConnection(connectionString))
using (var command = new MySqlCommand(sql, con))
{
    command.Parameters.Add(new MySqlParameter("@firmaid", MySqlDbType.VarChar).Value = firmaid);
    con.Open();
    using (var rd = command.ExecuteReader())
    {
        while (rd.Read())
        {
            string praktikant = rd.GetString("Navn");
            string fra = rd.GetString("Fra");
            string til = rd.GetString("Til");
            items.Add(new praktikanter(praktikant, fra, til));
        }
    }
}

【讨论】:

  • 哈,我写的是一样的东西。
猜你喜欢
  • 2019-09-19
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2013-07-23
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多