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

时间:2015-01-27 10:05:42

标签: c# mysql

我需要将一些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;
    }

1 个答案:

答案 0 :(得分:2)

不是嵌套MySqlCommands并循环第一个结果集来再次查询数据库以收集所有数据,而应该使用一个查询。还使用using - 语句来确保即使出现错误也会关闭连接并使用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));
        }
    }
}