2

私はこのコードを持っている見てください:

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;
    }

ご覧のとおり、3 つの関数を使用してデータベースにアクセスし、テーブル Comienzos から最大 ID を取得しますが、データ セットを int32 に変換する場合、関数 LevantoUltimoIDBarco は 0 を返します。

4

3 に答える 3

2

データセットから最初の値を選択する必要があります。完全なデータセットを整数に変換することはできません。

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

またはより単純です(クエリはデータセットで整数を返すため):

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

そして、単に 1 を返すのではなく、結果を返すか保存する必要があります。

于 2013-07-24T13:10:14.080 に答える
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
                }
于 2013-07-24T13:11:31.763 に答える
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 を返します。

于 2013-07-24T13:09:52.353 に答える