View Full Version : [c#] sql server 2005: costraint nn funziona
giangi_luca
21-06-2010, 21:20
ciao a tutti ho un problema che non riesco davvero a risolvere
ho definito a livello di db una tabella e in una colonna ho creato un costraint
che ogni volta che inserisco un recod mette il la data corrente.
il problem è che se faccio l'insert da db funziona
se faccio l'insert da form c# non funziona cioè nella colonna data viene messo null!
db è sql server 2005
come mai?
grazie
Gianluca
La colonna nel database l'hai scritta cosi?
CREATE TABLE [Test] (
....
[datetime] DEFAULT (getdate()) )
Se e' cosi', immagino che la tua form stia anche dichiarando esplicitamente il valore NULL per quella colonna, durante la insert.
Non devi assegnare alcun valore a quella colonna durante la insert, e allora il valore di default verra' imposto.
giangi_luca
22-06-2010, 13:28
ciao e per prima cosa grazie della risposta.
questo problema mi sta facendo ammattire.
allora la mia tabella era già esistente e dopo ho aggiunto il constraint cosi:
ALTER TABLE dbo.t_blacklist
ADD CONSTRAINT
data_corrente DEFAULT getdate() FOR dt_insert
poi da visual studio, lavoro con t-sql, e ho usato la seguente sintassi per popolare alcuni campi, fare la insert e committare, però non dò nessun valore alla data.
ecco cosa scrivo:
//istanza della tabella
t_blacklist tbList = new t_blacklist();
//la connessione col db
MyConnectionDB_SCDataContext conDb = new MyConnectionDB_SCDataContext();
//aggiorno due campi della tabella
tbList.NEW_CARD = Convert.ToInt64(newSC.Text);
tbList.OLD_CARD = Convert.ToInt64(oldSC.Text);
//effettuo l'insert a db
conDb.t_blacklists.InsertOnSubmit(tbList);
//effettuo il commit a db
conDb.SubmitChanges();
il campo dell'id della tabella a cui ho assegnato il vincolo di indentity invece funziona correttamente.
è davvero strano, spero riusciamo a risolvere il problema.
grazie mille
gianluca
Se stai usando l'entity framework immagino che la definzione della tabella t_blacklist e del gestore di questa tabella per andare a leggere/scrivere i record, passi NULL sotto quella colonna quando stai inserendo il singolo record
Occorre andare a vedere come "Insegnare" all'entity framework a trattare quel tipo di colonna.
Hai provato semplicemente a rinfrescare i metadati dopo aver aggiunto il constraint?
giangi_luca
22-06-2010, 15:24
dopo aver aggiunto il copstraint ho
1. fatto refresh sulla tabella da management studio
2. fatto refresh da visual studio nella parte dove aggiorno la tabella
e rimappata la tabella nel file di connessione.
devo fare altro?
giangi_luca
22-06-2010, 18:16
allora mettendo un breakpoint subito dopo avre eseguito il comando
conDb.t_blacklists.InsertOnSubmit(tbList);
conDb.SubmitChanges();
ho che la data è valorizza a null
mentre il campo id (su db è cn vincolo di identity) è valorizzato al valore che incrementa ogni volta.
che test posso fare altro?
Grazie
Gianluca
giangi_luca
22-06-2010, 18:39
ok!!! ho capito e risolto!!
allora il problema era il seguente:
accedendo ai campi della tabella mappata da VISUAL STUDIO ho
visto che i seguenti campi erano cosi valorizzati:
Auto Generated Value = false
Auto-sicn = never
mettondoli a true e oninsert ha funzionato.
però mi chiedo e vi chiedo queste opzioni vanno impostate da visual studio?
però per il campo del ID (con vincolo identity) i campi Auto Generated Value e Auto-sicn erano già valorizzati a true e onsinert.
Grazie del supporto
Gianluca
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.