|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 59
|
[c#] sql server 2005: costraint nn funziona
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
La colonna nel database l'hai scritta cosi?
Codice:
CREATE TABLE [Test] ( .... [datetime] DEFAULT (getdate()) ) Non devi assegnare alcun valore a quella colonna durante la insert, e allora il valore di default verra' imposto.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 59
|
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 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
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?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 59
|
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? |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 59
|
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 |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 59
|
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:27.



















