PROBLEMA CON SQLDATADAPTER

mercoledì 19 agosto 2009 - 12.03

2001gabry Profilo | Newbie

Salve a tutti, cerco di esporre il mio problema:
Ho un'applicazione scritta in vb.net che fa una select semplice su una tabella
restituisce il risultato della select in un datatable il quale è il datasource di una datagrid
Il Database era su un sql2000, e fin qui tutto bene.
Qualche giorno fa ho migrato il db da sql2000 a sql2005.
ora la stessa select genera un errore sul metodo fill del sqldataadapter generando un'eccezione del tipo
CONSTRAINT.EXCEPTION.
Qui di sotto il codice che prima funzionava e ora non piu'.
' c_sql è la mia select
'db è la connessione al database
'Tb è il data table
Dim ad As New SqlDataAdapter
ad.SelectCommand = New SqlCommand(c_Sql, Db)
ad.MissingSchemaAction = MissingSchemaAction.AddWithKey
Tb.Clear()
ad.Fill(Tb) ----> qui ora avviene l'eccezione
ad.Dispose()
Db.Close()

Per ora ho gestito l'errore eliminando ad.MissingSchemaAction = MissingSchemaAction.AddWithKey
ma non mi piace in quanto nel datatable non ho piu' le informazioni delle chiavi.
Qualcuno sa aiutarmi in modo da risolvere il problema recuperando nuovamente le informazioni delle chiavi ?
grazie
Spero di essere stato chiaro

gabriele

lbenaglia Profilo | Guru

>ora la stessa select genera un errore sul metodo fill del sqldataadapter
>generando un'eccezione del tipo
>CONSTRAINT.EXCEPTION.

Ciao Gabriele,

Puoi postare il comando di SELECT, i comandi di CREATE TABLE delle tabelle coinvolte complete di constraints ed il nome del constraint che viene vìolato?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

2001gabry Profilo | Newbie

grazie per la risposta.

questa e' una delle select che da il problema.

Select BATCH,DATAB,MAGA,STATO,TSPE,ORDI,SUM(QTAPR) AS CAPI FROM PRELIEVI WHERE REPAR='RE' AND STATO<>'C' and STATO<>'X' GROUP BY TSPE,BATCH,DATAB,MAGA,STATO,ORDI ORDER BY TSPE,ORDI,BATCH,DATAB,MAGA,STATO


create table:

USE [MAGPOLL]
GO
/****** Object: Table [dbo].[PRELIEVI] Script Date: 08/19/2009 16:45:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[PRELIEVI](
[Batch] [varchar](3) NOT NULL,
[Repar] [char](2) NOT NULL,
[VIAG] [char](5) NOT NULL,
[DataB] [char](8) NOT NULL,
[CLIE] [char](5) NOT NULL CONSTRAINT [DF_PRELIEVI_CLIE] DEFAULT (''),
[NUSK] [char](4) NOT NULL CONSTRAINT [DF_PRELIEVI_NUSK] DEFAULT (''),
[STAG] [char](2) NOT NULL,
[MODE] [char](6) NOT NULL,
[TESS] [char](4) NOT NULL,
[VRNT] [char](2) NOT NULL,
[TORD] [char](4) NOT NULL CONSTRAINT [DF_PRELIEVI_TORD] DEFAULT (''),
[TPOS] [char](1) NOT NULL,
[NCOL] [char](6) NOT NULL,
[QtaPr] [int] NOT NULL,
[TSPE] [char](1) NOT NULL,
[COLZ] [char](3) NOT NULL CONSTRAINT [DF_PRELIEVI_COLZ] DEFAULT (''),
[MAGA] [int] NOT NULL,
[PIAN] [int] NOT NULL,
[FILA] [int] NOT NULL,
[POSI] [int] NOT NULL,
[LIVE] [int] NOT NULL,
[Corsi] [int] NOT NULL,
[Stato] [char](1) NOT NULL,
[Opera] [char](10) NOT NULL,
[Term] [int] NOT NULL CONSTRAINT [DF_PRELIEVI_Term] DEFAULT (0),
[Ordi] [char](60) NOT NULL CONSTRAINT [DF_PRELIEVI_Ordi] DEFAULT (''),
[BKIT] [char](12) NOT NULL CONSTRAINT [DF_PRELIEVI_BKIT] DEFAULT (''),
CONSTRAINT [PK_PRELIEVI] PRIMARY KEY CLUSTERED
(
[Batch] ASC,
[DataB] ASC,
[CLIE] ASC,
[NUSK] ASC,
[STAG] ASC,
[MODE] ASC,
[TESS] ASC,
[VRNT] ASC,
[TORD] ASC,
[TPOS] ASC,
[NCOL] ASC,
[MAGA] ASC,
[PIAN] ASC,
[FILA] ASC,
[POSI] ASC,
[LIVE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF




questo è il messaggio di errore:
Impossibile attivare i vincoli. Una o più righe contengono valori che violano il vincolo non-null, unique o foreign-key.



grazie ancora

lbenaglia Profilo | Guru

>questa e' una delle select che da il problema.
>
>Select BATCH,DATAB,MAGA,STATO,TSPE,ORDI,SUM(QTAPR) AS CAPI FROM
>PRELIEVI WHERE REPAR='RE' AND STATO<>'C' and STATO<>'X'
>GROUP BY TSPE,BATCH,DATAB,MAGA,STATO,ORDI ORDER BY TSPE,ORDI,BATCH,DATAB,MAGA,STATO
>
>
>create table:
...
> CONSTRAINT [PK_PRELIEVI] PRIMARY KEY CLUSTERED
>(
> [Batch] ASC,
> [DataB] ASC,
> [CLIE] ASC,
> [NUSK] ASC,
> [STAG] ASC,
> [MODE] ASC,
> [TESS] ASC,
> [VRNT] ASC,
> [TORD] ASC,
> [TPOS] ASC,
> [NCOL] ASC,
> [MAGA] ASC,
> [PIAN] ASC,
> [FILA] ASC,
> [POSI] ASC,
> [LIVE] ASC
...
>
>questo è il messaggio di errore:
>Impossibile attivare i vincoli. Una o più righe contengono valori
>che violano il vincolo non-null, unique o foreign-key.

La PK in sostanza è l'unico constraint sulla tabella PRELIEVI che potrebbe causare il problema.
La select list, però, non contiene l'intera PK, quindi non capisco che senso abbia aggiungere una "PK monca" al DataSet che potrebbe portare a valori duplicati e quindi alla violazione del constraint.

>grazie ancora
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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