【问题标题】:Convert dataset into integer将数据集转换为整数
【发布时间】:2013-07-23 23:31:51
【问题描述】:

看我有这个代码:

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,

【问题讨论】:

    标签: c# database dataset integer


    【解决方案1】:

    查看您如何检索数据,然后读取该整数 (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 作为结果

    【讨论】:

      【解决方案2】:

      我的朋友,您应该使用 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
                      }
      

      【讨论】:

        【解决方案3】:

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

        Convert.ToInt32(lP.ObtenerRegistro(lQuery).Tables[0].Rows[0][0]);
        

        或更简单(因为查询在数据集中返回一个整数):

        (Int32)(lP.ObtenerRegistro(lQuery).Tables[0].Rows[0][0]);
        

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

        【讨论】:

        • 你有这个代码的地方:Convert.ToInt32(lP.ObtenerRegistro(lQuery));
        • 真的很有帮助,我做到了!谢谢!
        猜你喜欢
        • 2019-07-20
        • 2014-07-06
        • 1970-01-01
        • 2015-11-28
        • 2012-01-13
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多