Pegado o id do ultimo Registro inserido no mysql por esta arquitetura N Camadas
Na interface
protected void ImageButton1_Click1(object sender,ImageClickEventArgs e)
{
structReturn = new StructReturn();
IncluirCampos();
structReturn = Imovel.InsertImovel(imovel);
if (structReturn.Success)
{
lblError.Text = "Imovel Cadastrado com Sucesso!";
}
else
{
lblError.Text = structReturn.MessageReturn;
}
Na DBacess
public DataSet ExecuteDataSet()
{
MySqlDataAdapter da = null;
DataSet ds = null;
try
{
da = new MySqlDataAdapter();
ds = new DataSet();
da.SelectCommand = (MySqlCommand)cmd;
da.Fill(ds);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return ds;
}
public int ExecuteNonQuery()
{
int i = -1;
try
{
Open();
i = cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
Close();
}
return i;
}
Na Framework
public static Structs.StructReturn InsertImovel(ImovelEntity imovelEntity)
{
try
{
objStructReturn = new Framework.Structs.StructReturn();
dbaccess.CommandText = "SP_INSERT_IMOVEL";
dbaccess.AddParameter("F_nome", imovelEntity.Nome);
dbaccess.AddParameter("F_vlrvenda", imovelEntity.Vlvenda);
dbaccess.AddParameter("F_vlrcond", imovelEntity.Vlcond);
dbaccess.ExecuteNonQuery();
objStructReturn.Success = true;
}
catch (Exception erro)
{
objStructReturn.Success = false;
objStructReturn.MessageReturn = erro.Message;
}
return objStructReturn;
}
Inserind a inserindo blz , agora a minha duvida e como eu pego o ultimo registro inserido nesta nesta arquitertura N camdas Utilizando o SGDB Mysql.
Derocy Junior
Curtidas 0
Respostas
Fabio Mans
27/05/2009
Olá não sei te responder se no MySQL existe alguma função como SCOPE_IDENTITY() do SQL, mas você pode criar um método que te retorno o MAX que é ANSI-SQL.
Para te ajudar vou passar um exemplo com SQL
RECUPERAR IDENTITY
CREATE TABLE [dbo].[TBL_ALUNO](
[IDALUNO] [int] IDENTITY(1,1) NOT NULL,
[NOME] [varchar](50) NULL,
[EMAIL] [varchar](50) NULL,
[DTCADASTRO] [datetime] NULL CONSTRAINT [DF_TBL_ALUNO_DTCADASTRO] DEFAULT (getdate()),
CONSTRAINT [PK_TBL_ALUNO] PRIMARY KEY CLUSTERED
(
[IDALUNO] ASC
)
CREATE PROCEDURE [dbo].[INCLUIR_ALUNO]
(
@IDALUNO int output,
@NOME varchar(50),
@EMAIL varchar(50)
)
AS INSERT TBL_ALUNO
(
NOME,
EMAIL
)
VALUES
(
@NOME,
@EMAIL
)
SET @IDALUNO = SCOPE_IDENTITY()
public static int CadastraAluno(string Nome, string Emai)
{
//Recupera a string de conexão
string strConexao = ConfigurationManager.ConnectionStrings["cnnString"].ConnectionString;
using (SqlConnection cnn = new SqlConnection(strConexao))
{
SqlCommand cmdInsere = new SqlCommand("INCLUIR_ALUNO", cnn);
cmdInsere.CommandType = CommandType.StoredProcedure;
//Adiciona os parâmetros
cmdInsere.Parameters.Clear();
cmdInsere.Parameters.Add("@NOME", SqlDbType.VarChar, 50).Value = Nome;
cmdInsere.Parameters.Add("@EMAIL", SqlDbType.VarChar, 50).Value = Emai;
SqlParameter IdAluno = new SqlParameter("@IDALUNO", SqlDbType.Int);
IdAluno.Direction = ParameterDirection.Output;
cmdInsere.Parameters.Add(IdAluno);
cnn.Open();
cmdInsere.ExecuteScalar();
return Convert.ToInt32(cmdInsere.Parameters["@IDALUNO"].Value);
}
}
protected void btnCadastrar_Click(object sender, EventArgs e)
{
int iIdAluno = clsAluno.CadastraAluno(TextBox1.Text, TextBox2.Text);
}
Para te ajudar vou passar um exemplo com SQL
RECUPERAR IDENTITY
CREATE TABLE [dbo].[TBL_ALUNO](
[IDALUNO] [int] IDENTITY(1,1) NOT NULL,
[NOME] [varchar](50) NULL,
[EMAIL] [varchar](50) NULL,
[DTCADASTRO] [datetime] NULL CONSTRAINT [DF_TBL_ALUNO_DTCADASTRO] DEFAULT (getdate()),
CONSTRAINT [PK_TBL_ALUNO] PRIMARY KEY CLUSTERED
(
[IDALUNO] ASC
)
CREATE PROCEDURE [dbo].[INCLUIR_ALUNO]
(
@IDALUNO int output,
@NOME varchar(50),
@EMAIL varchar(50)
)
AS INSERT TBL_ALUNO
(
NOME,
)
VALUES
(
@NOME,
)
SET @IDALUNO = SCOPE_IDENTITY()
public static int CadastraAluno(string Nome, string Emai)
{
//Recupera a string de conexão
string strConexao = ConfigurationManager.ConnectionStrings["cnnString"].ConnectionString;
using (SqlConnection cnn = new SqlConnection(strConexao))
{
SqlCommand cmdInsere = new SqlCommand("INCLUIR_ALUNO", cnn);
cmdInsere.CommandType = CommandType.StoredProcedure;
//Adiciona os parâmetros
cmdInsere.Parameters.Clear();
cmdInsere.Parameters.Add("@NOME", SqlDbType.VarChar, 50).Value = Nome;
cmdInsere.Parameters.Add("@EMAIL", SqlDbType.VarChar, 50).Value = Emai;
SqlParameter IdAluno = new SqlParameter("@IDALUNO", SqlDbType.Int);
IdAluno.Direction = ParameterDirection.Output;
cmdInsere.Parameters.Add(IdAluno);
cnn.Open();
cmdInsere.ExecuteScalar();
return Convert.ToInt32(cmdInsere.Parameters["@IDALUNO"].Value);
}
}
protected void btnCadastrar_Click(object sender, EventArgs e)
{
int iIdAluno = clsAluno.CadastraAluno(TextBox1.Text, TextBox2.Text);
}
GOSTEI 0
Devmedia
27/05/2009
Derocy,
a resposta do consultor foi suficiente? podemos encerrar o chamado?
a resposta do consultor foi suficiente? podemos encerrar o chamado?
GOSTEI 0
Derocy Junior
27/05/2009
Estou precisando fazer no mysql , e retonar dentro de uma variavel o id , caso alguem tenha um exemplo , na arquitetura 3 camadas que o Carlos junior mostrou nas videos aulas , so que com mysql ficaria show para min , mas o mans foi muito atencioso .. como Sempre rs .
GOSTEI 0
Fabio Mans
27/05/2009
Com o MAX você consegue, SELECT MAX.
Crie um método que retorno este ID.
Crie um método que retorno este ID.
GOSTEI 0
Devmedia
27/05/2009
Derocy,
a resposta do consultor foi suficiente? Podemos encerrar o chamado?
a resposta do consultor foi suficiente? Podemos encerrar o chamado?
GOSTEI 0
Devmedia
27/05/2009
Derocy,
por falta de retorno estamos mudando o status do seu chamado para concluído. Caso tenha mais duvidas sobre o assunto aqui tratato, por favor, post aqi mesmo q o consultor voltará a lhe atender.
por falta de retorno estamos mudando o status do seu chamado para concluído. Caso tenha mais duvidas sobre o assunto aqui tratato, por favor, post aqi mesmo q o consultor voltará a lhe atender.
GOSTEI 0
Derocy Junior
27/05/2009
solucionado desta forma :
no SGDB (Mysql)
apos o insert coloquei
select LAST_INSERT_ID();
na Aplicação puxei o retorno e deu certo !
objStructReturn.RetonarID = dbaccess.ExecuteScalar();
objStructReturn.Success = true;
GOSTEI 0
Fabio Mans
27/05/2009
Ótimo, a função LAST_INSERT_ID(); eu desconhecia.
Boa sorte.
Boa sorte.
GOSTEI 0