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: