CommandBuilder e MySql

mercoledì 02 gennaio 2008 - 09.53

marcogio Profilo | Newbie

Utilizzo Visual C# e MySql.
Quando salvo i dati (utilizzo CommandBuilder), il programma mi dà il seguente messaggio di errore: "Riferimento ad un oggetto non impostato su un'istanza di oggetto".
Non riuscendo a trovare l'errore, ho sostituito il database MySql con SqlServer ed ho rilanciato l'applicazione. Tutto è filato liscio ed i dati sono stati salvati.
Questo è il listato:

-----------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;


namespace WindowsApplication1
{
public partial class Form1 : Form
{
string connessione,query, connessionesql,querysql;
MySqlConnection cn;
MySqlDataAdapter da;
MySqlCommandBuilder cb;
DataSet ds;
BindingSource bs;

SqlConnection cnsql;
SqlDataAdapter dasql;
SqlCommandBuilder cbsql;


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//connessionesql=@"Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Documents and Settings\marco\Documenti\prova.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True";
connessione = @"DataBase=prova;Data Source=portatileacer;User Id=root; Password=";
query = "Select * from tabella";
cn = new MySqlConnection(connessione);
//cnsql = new SqlConnection(connessionesql);
da = new MySqlDataAdapter(query,cn);
//dasql = new SqlDataAdapter(query, cnsql);
ds = new DataSet();
//cnsql.Open();
//dasql.Fill(ds,"tabella");
//cnsql.Close();

cn.Open();
da.Fill(ds, "tabella");
cn.Close();

//cbsql = new SqlCommandBuilder(dasql);
cb = new MySqlCommandBuilder(da);
bs=new BindingSource();

bs.DataSource=ds;
bs.DataMember="tabella";
dataGridView1.DataSource=bs;

}

private void button1_Click(object sender, EventArgs e)
{
/*
cnsql.Open();
dasql.Update(ds, "tabella");
cnsql.Close();
* */
cn.Open();
da.Update(ds, "tabella");
cn.Close();

}
}
}

alx_81 Profilo | Guru

>Utilizzo Visual C# e MySql.
>Quando salvo i dati (utilizzo CommandBuilder), il programma mi
>dà il seguente messaggio di errore: "Riferimento ad un oggetto
>non impostato su un'istanza di oggetto".
>Non riuscendo a trovare l'errore, ho sostituito il database MySql
>con SqlServer ed ho rilanciato l'applicazione. Tutto è filato
>liscio ed i dati sono stati salvati.
Ciao!
Hai provato a fare debug e controllare su che riga hai l'errore?
Alx81 =)

http://blogs.dotnethell.it/suxstellino

marcogio Profilo | Newbie

Si. L'errore è nella riga

da.Update(ds,"tabella");

SSUPERPIPPO Profilo | Guru

>Si. L'errore è nella riga
>
>da.Update(ds,"tabella");
>

Sembrerebbe che la tabella indicata non esista... può essere?
Prova in modalità debug a verificare se la tabella è presente nel tuo DataSet.


http://blogs.dotnethell.it/alebadalin

alx_81 Profilo | Guru

>>Si. L'errore è nella riga
>>
>>da.Update(ds,"tabella");
>>
>
>Sembrerebbe che la tabella indicata non esista... può essere?
>Prova in modalità debug a verificare se la tabella è presente
>nel tuo DataSet.
In effetti il ds lo valorizza, quindi quello non dovrebbe essere vuoto, e poi, visto che cambiando il tipo di db tutto funziona, sembra proprio che il problema sia la destinazione, quindi quoto questo messaggio. Controlla bene che l'oggetto sul db esista

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

marcogio Profilo | Newbie

Ma se la tabella non esistesse, l'errore dovrebbe verificarsi anche nell'istruzione

da.fill(ds,"tabella");

invece l'istruzione funziona benissimo ed il datagridview espone la tabella.

alx_81 Profilo | Guru

>Ma se la tabella non esistesse, l'errore dovrebbe verificarsi
>anche nell'istruzione
>
>da.fill(ds,"tabella");
>
>invece l'istruzione funziona benissimo ed il datagridview espone
>la tabella.
Cerchiamo di capire quale oggetto è nothing..
Quale dei due oggetti (dataset o dataadapter), quando usi la sql connection è nothing? prova a fare debug e controllare. Perchè sono gli unici oggetti che ti possono dare problemi nell'istruzione che solleva l'eccezione..




Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

marcogio Profilo | Newbie

quando uso sqlconnection e quindi il database sqlserver, tutto fila liscio. Non ho problemi ne' con sqldataadapter ne' con dataset. Quando utilizzo mysqlconnection e quindi il database mysql, il programma si avvia tranquillamente e i dati sono mostrati nella tabella datagridview1. Se aggiungo record e cerco di salvare, mi dà errore. Utilizzo mysql-connector-net-5.1.4 e quindi nel listato MySqlCommandBuilder. Credo che il problema sia o nella indicizzazione della tabella mysql oppure proprio nel MySqlCommandBuilder. Quando aggiungo un record e cerco di fare l'update mi dà l'errore "riferimento ad un oggetto non impostato su un'istanza di oggetto" , mentre se cerco di modificare un record esistente, mi dà il seguente messaggio di errore: "generazione SQL dinamica non supportata per un select command che non restituisce informazioni di tabelle di base".

Ho fatto un'altra prova. Ho cercato di aggiungere un record senza fare affidamento a MySqlCommandBuilder, ma utilizzando MySqlCommand. Tutto è filato liscio. Io credo che il problema, a questo punto sia proprio MySqlCommandBuilder. Pultroppo MySqlCommandBuilder è assolutamente necessario in quanto fa risparmiare molto codice. Debbo quindi trovare il sistema per farlo funzionare anche con MySql come con SqlServer. Avete qualche idea?

alx_81 Profilo | Guru

>quando uso sqlconnection e quindi il database sqlserver, tutto
>fila liscio. Non ho problemi ne' con sqldataadapter ne' con dataset.
>Quando utilizzo mysqlconnection e quindi il database mysql, il
>programma si avvia tranquillamente e i dati sono mostrati nella
>tabella datagridview1. Se aggiungo record e cerco di salvare,
>mi dà errore. Utilizzo mysql-connector-net-5.1.4 e quindi nel
>listato MySqlCommandBuilder. Credo che il problema sia o nella
>indicizzazione della tabella mysql oppure proprio nel MySqlCommandBuilder.
>Quando aggiungo un record e cerco di fare l'update mi dà l'errore
>"riferimento ad un oggetto non impostato su un'istanza di oggetto"
>, mentre se cerco di modificare un record esistente, mi dà il
>seguente messaggio di errore: "generazione SQL dinamica non supportata
>per un select command che non restituisce informazioni di tabelle
>di base".
>
>Ho fatto un'altra prova. Ho cercato di aggiungere un record senza
>fare affidamento a MySqlCommandBuilder, ma utilizzando MySqlCommand.
>Tutto è filato liscio. Io credo che il problema, a questo punto
>sia proprio MySqlCommandBuilder. Pultroppo MySqlCommandBuilder
>è assolutamente necessario in quanto fa risparmiare molto codice.
>Debbo quindi trovare il sistema per farlo funzionare anche con
>MySql come con SqlServer. Avete qualche idea?
Ok, non hai risposto alla mia domanda , comunque hai dato indicazioni preziose. Volevo sapere se i tuoi oggetti dataset o dataadapter fossero nothing per "partire dal basso", visto che l'errore è il classico "Object Not Set An Instance Of An Object". Comunque, in effetti, leggendo qua e là, sembra che tu non sia l'unico ad avere problemi con il metodo DataAdapter.Update ed il CommandBuilder.
Purtroppo non ho MySQL per provare, ma ho trovato questo link:

http://forums.mysql.com/read.php?38,56936,60594#msg-60594

Prova a controllare se ti serve. Segui il metodo indicato..
Sembra proprio che il tuo CommandBuilder si rifiuti di creare la sintassi UPDATE.
Spero possa esserti di aiuto.
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

marcogio Profilo | Newbie

OK. grazie.

Se può essere di interesse per qualcuno, ho risolto il mio problema sostituendo la libreria MySql-connector-net-5.x.x. con una più vecchia, per Net 1.1, MySql-connector-net-1.0.9. Non so perchè però funziona alla grande (e recupera automaticamente i valori autoincrementanti della tabella). Il software è per me ancora una cosa sconosciuta. Grazie dell'aiuto, sempre prezioso.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5