Erro no C# na instrução Insert | Dicas C# | Forum | C# Brasil


Erro no C# na instrução Insert | Dicas C# | Forum

Login form protected by Login LockDown.


 
Você precisa fazer login para escrever mensagens Login Registrar


Registrar? | Recuperar Senha?

Pesquisar Fóruns:


 






Minimum search word length is 4 characters – Maximum search word length is 84 characters
Uso do Curinga nas Pesquisa:
*  igual a qualquer número de caracteres    %  igual a exatamente um caractere

Erro no C# na instrução Insert

Sem tags
UsuárioMensagem

11:58
12 fevereiro 2012


PauloRocha

São Paulo

Member

editoriais 5

Bom dia!

Estou recebendo uma mensagen de erro quando tento inserir um registro, o problema é que a estrutura é  identica aos outros formulários que criei, só mudam os campos, pois as tabelas são outras. Como funcionou na primeira, usei a mesma estrutura para os demais.

A mensagem de erro: Não existe mapeamento do tipo de objeto System.Data.DataRowView para um provedor gerenciado de tipo nativo.

Infelizmente a página do help do C# 2008 Express e SQL Server 2008 Express não ajuda muito, além de ser muito confuso.

Abaixo segue o código completo que estou usando e que serve para os outros formulários que funcionam:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

 

namespace SementesDoAmanhã

{

    public partial class FrmIncluirMatricula : Form

    {

        Conexao cx = new Conexao(); // Uso uma Classe chamada Conexão.

        string sql = "";

 

        public FrmIncluirMatricula()

        {

            InitializeComponent();

        }

 

        private void btnFechar_Click(object sender, EventArgs e)

        {

            this.Close();

        }

 

        private void FrmIncluirMatricula_Load(object sender, EventArgs e)

        {

            preencheCboAluno();

            lblData.Text = DateTime.Now.ToString();

 

        }

 

        private void preencheCboAluno() // Preenche uma primeira ComboBox

        {

            try

            {

                SqlDataAdapter da;

                DataSet ds = new DataSet();

                sql = "SELECT idAluno, NomeCurto FROM TbAluno ORDER by NomeCurto";

                cx.Conectar();

                da = new SqlDataAdapter(sql, cx.c);

                da.Fill(ds, "TbAluno");

                cboNomeAluno.ValueMember = "idAluno";

                cboNomeAluno.DisplayMember = "NomeCurto";

                cboNomeAluno.DataSource = ds.Tables["TbAluno"];

                cx.Desconectar();

                preencheCboTia();

            }

            catch (SqlException sx)

            {

                MessageBox.Show("Erro ao carregar Aluno: " + sx.Message);

            }

            finally

            {

                cx.Desconectar();

            }

        }

 

        private void preencheCboTia() // Preenche uma segunda ComboBox

        {

            try

            {

                SqlDataAdapter da;

                DataSet ds = new DataSet();

                sql = " SELECT idInstrutor, NomeCurtoInstr FROM TbInstrutor ORDER by NomeCurtoInstr ";

                cx.Conectar();

                da = new SqlDataAdapter(sql, cx.c);

                da.Fill(ds, "TbInstrutor");

                cboInstrutor.ValueMember = "idInstrutor";

                cboInstrutor.DisplayMember = "NomeCurtoInstr";

                cboInstrutor.DataSource = ds.Tables["TbInstrutor"];

                cx.Desconectar();

            }

            catch (SqlException sx)

            {

                MessageBox.Show("Erro ao Carregar Sala: " + sx.Message);

            }

            finally

            {

                cx.Desconectar();

            }

        }

 

        private void btnGravar_Click(object sender, EventArgs e)

        {

            if (!string.IsNullOrEmpty(mtbDataMatr.Text) || !string.IsNullOrEmpty(mtbIdade.Text))

            {

                try

                {

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = cx.c;

                    cmd.CommandText = " INSERT INTO TbAlunoDetail (idAluno, DtMatricula, Idade, " +

                        " TiaSala, Escolaridade, ReforcoEscolar, SituacaoSaude, Estatura, Aparencia, Altura, " +

                        " Peso, Vest_Superior, Tam_Superior, Vest_Inferior, Tam_Inferior, " +

                        " Vest_Calcado, Tam_Calcado, Vest_Intimos, Tam_Intimos, Presente, " +

                        " CorPreferida, Time) Values (@aluno, @dataMatr, @idade, @tiaSala, " +

                        " @escola, @reforco, @saude, @estatura, @aparencia, @altura, @peso, @superior, " +

                        " @tamSup, @inferior, @tamInf, @calcado, @tamCalc, @intimos, @tamInt, " +

                        " @presente, @cor, @time) ";

                    cmd.Parameters.AddWithValue("@aluno", cboNomeAluno.SelectedIndex.ToString());

                    cmd.Parameters.AddWithValue("@dataMatr", mtbDataMatr.Text);

                    cmd.Parameters.AddWithValue("@idade", mtbIdade.Text);

                    cmd.Parameters.AddWithValue("@tiaSala", cboInstrutor.SelectedItem);

                    cmd.Parameters.AddWithValue("@escola", txtEscolaridade.Text);

                    cmd.Parameters.AddWithValue("@reforco", ckbReforco.Checked == true ? true : false);

                    cmd.Parameters.AddWithValue("@saude", txtSaude.Text);

                    cmd.Parameters.AddWithValue("@estatura", cboAltura.SelectedItem);

                    cmd.Parameters.AddWithValue("@aparencia", cboAparencia.SelectedItem);

                    cmd.Parameters.AddWithValue("@altura", cboAltura.SelectedItem);

                    cmd.Parameters.AddWithValue("@peso", txtPeso.Text);

                    cmd.Parameters.AddWithValue("@superior", cboSuperior.SelectedItem);

                    cmd.Parameters.AddWithValue("@tamSup", txtTamSup.Text);

                    cmd.Parameters.AddWithValue("@inferior", cboInferior.SelectedItem);

                    cmd.Parameters.AddWithValue("@tamInf", txtTamInf.Text);

                    cmd.Parameters.AddWithValue("@calcado", cboCalcado.SelectedItem);

                    cmd.Parameters.AddWithValue("@tamCalc", txtTamCalc.Text);

                    cmd.Parameters.AddWithValue("@intimos", cboIntimos.SelectedItem);

                    cmd.Parameters.AddWithValue("@tamInt", txtTamInt.Text);

                    cmd.Parameters.AddWithValue("@presente", txtPresente.Text);

                    cmd.Parameters.AddWithValue("@cor", txtCor.Text);

                    cmd.Parameters.AddWithValue("@time", cboTime.SelectedItem);

                    cmd.Connection.Open();

                    cmd.ExecuteNonQuery(); // O Erro que mencionei se apresenta aqui

                    DialogResult resultado = MessageBox.Show("A nova Matrícula foi incluída! Deseja incluir nova matrícula?", "Confirmação",

                        MessageBoxButtons.YesNo, MessageBoxIcon.Question);

 

                    if (resultado == DialogResult.Yes)

                    {

                        foreach (Control ctr in this.Controls)

                        {

                            if (ctr is TextBox)

                                (ctr as TextBox).Text = "";

                            if (ctr is RadioButton)

                                (ctr as RadioButton).Checked = false;

                            if (ctr is MaskedTextBox)

                                (ctr as MaskedTextBox).Text = "";

                        }

                        mtbDataMatr.Focus();

                    }

                    else

                    {

                        this.Close();

                    }

                    cx.Desconectar();

                }

                catch (SqlException sx)

                {

                    MessageBox.Show("Erro ao incluir matrícula: " + sx.Message.ToString(), "Aviso",

                        MessageBoxButtons.OK, MessageBoxIcon.Warning);

                }

                finally

                {

                    cx.Desconectar();

                }

            }

            else

            {

                MessageBox.Show("Informe os dados da matrícula!", "Aviso",

                    MessageBoxButtons.OK, MessageBoxIcon.Warning);

            }

        }

    }

}

 

Esta é descrição completa do erro:

System.ArgumentException estava sem tratamento

Message="Não existe mapeamento do tipo de objeto System.Data.DataRowView para um provedor gerenciado de tipo nativo."

Source="System.Data"

StackTrace:

em System.Data.SqlClient.MetaType.GetMetaTypeFromValue(Type dataType, Object value, Boolean inferLen)

em System.Data.SqlClient.SqlParameter.GetMetaTypeOnly()

em System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc)

em System.Data.SqlClient.SqlCommand.BuildParamList(TdsParser parser, SqlParameterCollection parameters)

em System.Data.SqlClient.SqlCommand.BuildExecuteSql(CommandBehavior behavior, String commandText, SqlParameterCollection parameters, _SqlRPC& rpc)

em System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)

em System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

em System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)

em System.Data.SqlClient.SqlCommand.ExecuteNonQuery()

em SementesDoAmanhã.FrmIncluirMatricula.btnGravar_Click(Object sender, EventArgs e) na C:\Users\Rocha_VGN\Documents\Visual Studio 2008\Projects\SementesDoAmanha\SementesDoAmanha\FrmIncluirMatricula.cs:linha 126

em System.Windows.Forms.Control.OnClick(EventArgs e)

em System.Windows.Forms.Button.OnClick(EventArgs e)

em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

em System.Windows.Forms.Control.WndProc(Message& m)

em System.Windows.Forms.ButtonBase.WndProc(Message& m)

em System.Windows.Forms.Button.WndProc(Message& m)

em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)

em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

em System.Windows.Forms.Application.Run(Form mainForm)

em SementesDoAmanhã.Program.Main() na C:\Users\Rocha_VGN\Documents\Visual Studio 2008\Projects\SementesDoAmanha\SementesDoAmanha\Program.cs:linha 20

em System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)

em System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)

em System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)

em System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()

em System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)

em System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)

em System.Activator.CreateInstance(ActivationContext activationContext)

em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()

em System.Threading.ThreadHelper.ThreadStart_Context(Object state)

em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

em System.Threading.ThreadHelper.ThreadStart()

InnerException:

Sem tags


About the C# Brasil Forum

O fuso horário do Fórum:UTC -3

Maior Número de Usuários Online: 31

Online Agora:
6 Visitantes

Atualmente navegando Tópico:
1 Visitante

Estatísticas do Fórum:

Grupos: 1
Fóruns: 16
Tópicos: 183
Editorias: 379

Grupo de Usuários:

Existem 1672 Membros

Existem 3 Admins

Participantes mais ativos:

Gabriel Gomes – 14
Lucas Bessa – 7
listmaier – 7
Diego Canedo – 7
Anderson Bernardi – 7
Mauricio Naozuka – 6

Novos Membros Recentes: alexander, tfbarbosa, sandro.herbst, Eric Humberto, Francismar, saulop4

Administradores: Raphael Cardoso (87 Mensagens), Rodrigo Coimbra (5 Mensagens), Thiago Suzuki (4 Mensagens)