Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BrunoCosta.dsn

[Resolvido] Specified cast is not valid

Recommended Posts

Pessoal, bom dia.

 

Estou com um problema que é o seguinte: Em uma transação preciso, primeiro armazenar dados em uma tabela, pegar o id do registro, e utilizá-lo para armazenar em outra tabela. Estou tentando usar o SCOPE_IDENTITY(), porém está ocorrendo um erro no comando id = (int)cmdId.ExecuteScalar(). Alguém sabe o motivo?

 

Segue o código:

 

using (SqlConnection sqlCon = new SqlConnection("String...."))
            {

                sqlCon.Open();
                SqlTransaction sqlTran = sqlCon.BeginTransaction();

                try
                {
                    

                    using (SqlCommand sqlCmd = new SqlCommand("Insert into Tabela values ('Bruno')", sqlCon, sqlTran))
                    {
                        
                        sqlCmd.ExecuteNonQuery(); 
                    }

                    int id = 0;
                    SqlCommand cmdId = new SqlCommand("SELECT SCOPE_IDENTITY()",sqlCon, sqlTran);
                    {
                        id = (int)cmdId.ExecuteScalar();
                    }

                    sqlTran.Commit();

                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    sqlTran.Rollback();
                }
                finally
                {
                    sqlCon.Close();
                }
            }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia bruno o cast invalido deve ser pq seu resultado deve esta sendo nulo, tenta algo assim:

using (SqlConnection sqlCon = new SqlConnection("String...."))
            {
                sqlCon.Open();
                try
                {
                    int id = 0;
                    using (SqlCommand sqlCmd = new SqlCommand("Insert into Tabela values ('Bruno'); SELECT @@IDENTITY AS 'Identity'", sqlCon, sqlTran))
                    {
                        
                        id = (int) sqlCmd.ExecuteScalar(); 
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    sqlTran.Rollback();
                }
                finally
                {
                    sqlCon.Close();
                }
            }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, já resolvi.

 

Ao invés do CAST explícito, é necessário usar a função Conver.ToInt32().

 

Ficou assim: id = Convert.ToInt32(cmdId.ExecuteScalar()).

 

Obrigado Ivan!!

 

Já resolvi. Resposta acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.