Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
CommandBuilder e MySql
mercoledì 02 gennaio 2008 - 09.53
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
marcogio
Profilo
| Newbie
18
messaggi | Data Invio:
mer 2 gen 2008 - 09:53
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
8.814
messaggi | Data Invio:
mer 2 gen 2008 - 14:30
>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
18
messaggi | Data Invio:
mer 2 gen 2008 - 19:23
Si. L'errore è nella riga
da.Update(ds,"tabella");
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
mer 2 gen 2008 - 21:07
>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
8.814
messaggi | Data Invio:
mer 2 gen 2008 - 22:18
>>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
18
messaggi | Data Invio:
mer 2 gen 2008 - 22:32
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
8.814
messaggi | Data Invio:
mer 2 gen 2008 - 23:09
>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
18
messaggi | Data Invio:
gio 3 gen 2008 - 06:45
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
8.814
messaggi | Data Invio:
gio 3 gen 2008 - 14:24
>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
18
messaggi | Data Invio:
gio 3 gen 2008 - 15:48
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.
Torna su
Stanze Forum
Elenco Threads
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 !