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
FillSchema com'è e come funziona?
mercoledì 04 marzo 2009 - 16.35
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
mer 4 mar 2009 - 16:35
Non so se scrivo nella sezione adatta..ma non ho compreso nel forum dove dovrei scrivere..
vengo al dunque io ho una query sql molto complessa e composta da altre sotto-queries..
supponendo che da sia il mio DbDataAdapter , dopo aver passato la string sql e fatto tutto sempre come al solito..
prima di leggere il mio DataTable faccio quest due righe:
da.FillSchema(ds,SchemaType.Source);
da.Fill (ds);
e nel da.Fill(ds) ottengo l'errore: "System.Data.CostraintException: Impossibile attivare i vincoli. Una o più righe contengono valori che violano non-null, unique o foreign-key".
se tolgo da.FillSchema(ds,SchemaType.Source); non ho problemi...
Non capisco però il perché dell'errore. Io non ho specificato alcun vincolo, e poi con SchemaType.Source non dovrebbe ignorare qualsiasi schema?
In pratica quello che mi fa questo lavoro passando la stringa sql è una classe usata anche da altri parti..vorrei evitare di di togliere la FillSchema poichè non so che danni andrei a causare..però magari vorrei capire come fare a capire quando non va utilizzata.
FillSchema com'è e come funziona? come risolvere?
ciao
Vincenzo
Programmatore sbilenco
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
mer 4 mar 2009 - 19:26
Ciao Vincenzo.
Se non ho capito male.....con FillSchema imposti la struttura del DataTable esattamente come è la struttura della tabella nel Db a prescindere di quali campi includi o meno nella query.
A questo punto, l'errore che ricevi, avrebbe senso solo se nella query ometti alcuni dei campi presenti nella tabella del DB.
Facci sapere...
Ciao
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
gio 5 mar 2009 - 09:32
non riesco a capire quello che intendi.
la mia stringa sql è del formato così incasinata:
select campo1, campo2, SUM(campo3) AS campo3
from
(select a.campo1
, b.campo2
, (Select campo from tabella3 C where C.chiave3 = A.Chiave) AS Campo3
FROM tabella1 A
inner join tabella2 B
On A.chiave = B.Chiave) T
group by campo1, campo2
per l'esecuzione della query faccio così (riporto un sunto dalla classe):
OleDbConnection cn = new OleDbConnection(connString)
OleDbCommand cm = new OleDbCommand(sql,cn);
OleDbDataAdapter da = new OleDbDataAdapter(cm);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
cb.RefreshSchema();
DataSet ds = new DataSet();
da.FillSchema(ds,SchemaType.Source);
da.Fill (ds);
.....
come devo modificarle ste righe per evitare l'errore?..
per quale motivo ho l'errore ancora non l'ho capito
Vincenzo
Programmatore sbilenco
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
gio 5 mar 2009 - 20:39
>come devo modificarle ste righe per evitare l'errore?..
Non lo so esattamente .... dovrei vedere la struttura della tabella che hai nel db.
Ma potrei suggerti una prova per vedere se quello che ti ho indicato io è vero oppure no....una specie di ricerca guasto.
Comincia con questa QueryString in modo tale da capire se l'errore dipende dalla query di select o meno:
SELECT * FROM TuaTabella
Se non ricevi più l'eccezione, vuol dire che, probabilmente, è come ti ho detto io....per maggiori informazioni, guarda qui:
http://msdn.microsoft.com/it-it/library/system.data.common.dataadapter.fillschema.aspx
Facci sapere...
Ciao
ysdemarc
Profilo
| Expert
587
messaggi | Data Invio:
ven 6 mar 2009 - 11:46
...Al momento ho risolto
mettendo sta riga per ogni colonna nella stringa sql:
(CASE WHEN Campo IS NULL THEN '' ELSE Campo END) AS Campo
quello che dici tu non riesco a concepirlo..o meglio se un database ha dei vincoli, com'è possibile che facendo la select possa trovare righe che non rispettano quei vincoli?
...bo.. non ci capisco
cmq, queste tabelle con le rispettive colonne le utilizzo in altre form per la scelta da parte dell'utente..
forse il problema sta nelle sotto query.. però non capisco chi gli dice al dataAdapter che il campo deve essere not null, visto che in questo caso non c'è un vero e proprio schema..
Vincenzo
Programmatore sbilenco
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 !