如何简化代码? (数据集结果)

时间:2018-08-28 10:38:23

标签: c# mysql database dataset

我有一个代码:

MySqlCommand cmd = connection.CreateCommand();
                cmd.CommandText = "SELECT nom, prenom from liste_personnels where mail ='" + mailTest + "'";
                MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adap.Fill(ds);
                nom = ds.Tables[0].Rows[0].ItemArray[0].ToString();
                prenom = ds.Tables[0].Rows[0].ItemArray[1].ToString();

我找到了如何提取变量nom和prenom的方法,但我认为这很复杂。可以简化我的代码-dataSet的结果是将两个变量等放在一个表中吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

DataSet在这里似乎过分杀伤;我将使用一个简单的MySqlDataReader。 (另外,请使用参数来防止SQL注入。)

string nom = null, prenom = null;
using (var cmd = connection.CreateCommand())
{
    // create the command and bind the parameter; this prevents SQL injection
    cmd.CommandText = "SELECT nom, prenom from liste_personnels where mail = @mail";
    cmd.Parameters.AddWithValue("@mail", mailtest);
    using (var reader = cmd.ExecuteReader())
    {
        // check if a row was found in the DB; you may need to handle if it's false
        if (reader.Read())
        {
            // read the data
            nom = reader.GetString(0);
            prenom = reader.GetString(1);
        }
    }
}

最后,如果您可以在项目中添加另一个库,我将使用Dapper来简化上面的代码:

var result = connection.Query(
        "SELECT nom, prenom from liste_personnels where mail = @mailtest",
        new { mailtest })
    .SingleOrDefault();
var nom = (string) result?.nom;
var prenom = (string) result?.prenom;