C# 在另一个读卡器解决方案中使用读卡器?

C# 在另一个读卡器解决方案中使用读卡器?,c#,mysql,C#,Mysql,无论如何,我需要将一些mysql数据放入另一个mysql阅读器请求中,以解决我显然不能同时打开两个阅读器的问题—所有这些都将在datagrid中结束 public void DBSelectPraktikanter(object sender) { string Command = "SELECT * FROM forlob WHERE firmaid = N'" + firmaid + "'"; MySqlConnection sqlConne

无论如何,我需要将一些mysql数据放入另一个mysql阅读器请求中,以解决我显然不能同时打开两个阅读器的问题—所有这些都将在datagrid中结束

    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;
    }
与嵌套MySqlCommands并循环第一个resultset再次查询数据库以收集所有数据不同,您应该真正使用一个查询。还可以使用using语句确保即使出现错误也会关闭连接,并使用sql参数避免sql注入问题:

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

这不是你问题的答案,而是你需要注意的问题。您的代码使我们容易受到SQL注入的攻击。更多信息,请参阅本文:不清楚你在问什么。出了什么问题?简单地说,可能是重复:启用MARS,如果您的提供商不支持它,那么为第二个数据读取器创建第二个连接…您是否考虑过使用句号。在您的问题中,是否有助于帮助阅读清晰?不要让我们帮你变得更困难。哈,我也在写同样的东西。