C# 将数据集转换为整数

C# 将数据集转换为整数,c#,database,dataset,integer,C#,Database,Dataset,Integer,看,我有这个密码: private void obtengoUltimoComienzoColocado() { ManejoUsuarios lAdm = new ManejoUsuarios(); lblTodoOK.Text = lAdm.LevantoUltimoIDBarco().ToString(); } public int LevantoUltimoIDBarco() { Conexion

看,我有这个密码:

private void obtengoUltimoComienzoColocado()
    {
        ManejoUsuarios lAdm = new ManejoUsuarios();
        lblTodoOK.Text = lAdm.LevantoUltimoIDBarco().ToString();

    }

public int LevantoUltimoIDBarco()
        {
            ConexionBD lP = new ConexionBD();
            try
            {
                string lQuery = "Select Max(idBarco) as UltimoID From Comienzos;";
                Convert.ToInt32(lP.ObtenerRegistro(lQuery));
                return 1;
            }
            catch (Exception ex)
            {
                return 0;
            }

        }

public DataSet ObtenerRegistro(string SqlQuery)
    {
        DataSet lResult;
        SqlConnection lSqlConnection = new SqlConnection("Data Source=SEBA-PC\\sqlexpress;Initial Catalog=Batalla_Naval;Integrated Security=True");
        SqlCommand lSqlCommand = null;
        try
        {
            lSqlCommand = new SqlCommand();
            lSqlCommand.CommandText = SqlQuery;
            lSqlCommand.CommandType = CommandType.Text;

            SqlDataAdapter lAdapter = new SqlDataAdapter(lSqlCommand);
            lResult = new DataSet();
            lSqlConnection.Open();
            lSqlCommand.Connection = lSqlConnection;
            lAdapter.Fill(lResult);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            lSqlConnection.Close();
        }
        return lResult;
    }

如您所见,我使用三个函数访问数据库并从Comienzos表中获取最大ID,但当我想将数据集转换为int32时,函数LevantoUltimoIDBarco返回我0,

查看如何检索数据,然后读取该整数(max())的正确代码如下

string lQuery = "Select Max(idBarco) as UltimoID From Comienzos;";
DataSet ds  = lP.ObtenerRegistro(lQuery);
return Convert.ToInt32(ds.Tables[0].Rows[0][0] == DBNull.Value ? 0 : ds.Tables[0].Rows[0][0]);

但是,如果您的表没有记录,则MAX(idBarco)将返回DBNull作为结果

您必须从数据集中选择第一个值,您无法将完整的数据集转换为整数:

Convert.ToInt32(lP.ObtenerRegistro(lQuery).Tables[0].Rows[0][0]);
或者更简单(因为查询在数据集中返回一个整数):


然后您必须返回或保存结果,而不是只返回1。

我的朋友,您应该使用
ExecuteScalar
返回单个值,而不是适配器并填充数据集

 SqlConnection lSqlConnection = new SqlConnection("Data Source=SEBA-PC\\sqlexpress;Initial Catalog=Batalla_Naval;Integrated Security=True");
                SqlCommand lSqlCommand = null;
                try
                {
                    lSqlCommand = new SqlCommand();
                    lSqlCommand.CommandText = SqlQuery;
                    lSqlCommand.CommandType = CommandType.Text;
                    var result = lSqlCommand.ExecuteScalar();
                    int MyID = Convert.ToInt32(result);

                }
                catch(ex)
                {
                    // DO SOMETHING
                }

您使用此代码的地方:
Convert.ToInt32(lP.ObtenerRegistro(lQuery))非常有用,我成功了!谢谢
 SqlConnection lSqlConnection = new SqlConnection("Data Source=SEBA-PC\\sqlexpress;Initial Catalog=Batalla_Naval;Integrated Security=True");
                SqlCommand lSqlCommand = null;
                try
                {
                    lSqlCommand = new SqlCommand();
                    lSqlCommand.CommandText = SqlQuery;
                    lSqlCommand.CommandType = CommandType.Text;
                    var result = lSqlCommand.ExecuteScalar();
                    int MyID = Convert.ToInt32(result);

                }
                catch(ex)
                {
                    // DO SOMETHING
                }