C# 将C变量设置为从数据库中选择

C# 将C变量设置为从数据库中选择,c#,mysql,string,variables,C#,Mysql,String,Variables,如何获取存储在Select方法中的信息并将其转换为字符串?我试图从match_id列中获取最大值,并将其值从command.CommandText中获取到matchCode字符串中。我将从这里走向何方 string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;"; string matchCode = ""; MySqlConnection connect = new MySql

如何获取存储在Select方法中的信息并将其转换为字符串?我试图从match_id列中获取最大值,并将其值从command.CommandText中获取到matchCode字符串中。我将从这里走向何方

    string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;";
    string matchCode = "";
    MySqlConnection connect = new MySqlConnection(connectString);
    MySqlCommand command = connect.CreateCommand();
    command.CommandText = "SELECT MAX(VAL(match_id)) FROM `data`";

    try
    {
       connect.Open();
       command.ExecuteNonQuery();
       matchCode = "??";
       connect.Close();
    }
    catch (Exception ex)
    {
       Console.WriteLine(ex.Message);
    }
我是新来C的,就像我第四天尝试它一样。谢谢你的帮助

ExecuteOnQuery方法用于插入/更新/删除查询。如果您只是得到一个值,请使用ExecuteScalar。如果要返回整个结果集,请使用ExecuteReader或填充数据集对象

此外,您还应该做一些C语言惯用的事情:

public int GetMatchCode()
{
    //this could be loaded from config file or other source
    string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;";
    string sql = "SELECT MAX(VAL(match_id)) FROM `data`";
    using (var connect = new MySqlConnection(connectString))
    using (var command = new MySqlCommand(sql, connect))
    {
        connect.Open();
        var result = command.ExecuteScalar();
        if (result == DBNull.Value)
        {              
           //what you do here depends on your application
           // if it's impossible for the query to return NULL, you can even skip this
        }
        return (int)result;
    }
}
有些变化需要解释:

我从来没打过电话,很接近。即使抛出异常,using块也会为我解决这个问题。如果发生异常,旧代码将使连接挂起。 .Net开发人员倾向于相信非常小的方法。更重要的是,这个方法应该是一个类的一部分,这个类只有其他简单的公共数据访问方法,可能还有一些用于抽象类中公共代码的私有助手方法或属性。 这里没有异常处理代码。如果您有属于泛型数据库访问类的小方法,那么异常处理应该在更高的级别上进行,这样您可以更好地决定如何继续。
matchCode=command.ExecuteScalar.ToString;ExecuteOnQuery是一个问题:您告诉它您不想要结果。您需要ExecuteScalar-它返回一个包含结果集第一行中第一个值的对象。请不要编辑您的问题并实现您得到的答案-稍后阅读的人不会理解发生了什么。对于托管IDisposable生命周期,使用+1。可以更好地掌握对象范围,从而更清楚地清理代码。谢谢,它正在工作。还有一件事,如果我要查找的数据是Int形式的,那么这怎么行呢?@Kragalon您必须将返回类型更改为Int,添加一行以检查DBNull,并将强制转换添加到Int。我现在看到您正在使用Val函数,所以我将更新答案以显示这一点。