Data

giovedì 25 novembre 2004 - 18.01

mon78 Profilo | Junior Member

Ciao a tutti ho una web form con alcune caselle di testo in cui l'utente inserisce dei valori: utilizzo così una query sql parametrica che effettua l'inserimento in una tabella del database; il problema è che in un campo di testo l'utente deve inserire una data, e tutto va bene; poichè il campo nn è obbligatorio, se l'utente nn inserisce nulla, nel campo della tabella compare la data 01/01/1900, invece nn dovrebbe comparire nulla:
la query in sql è del tipo:

INSERT INTO [Progetto]([Nome], [Dt_Inizio], [Fine], [Descrizione], [Dt_Creazione], IDStato, IDAzienda)
VALUES(@Nome, @Dt_Inizio, @Fine, @Descrizione, @Dt_Creazione, @attivo, @idazienda)

il campo della data è @Dt_Inizio

ho provato in questo modo:

INSERT INTO [Progetto]([Nome], [Dt_Inizio], [Fine], [Descrizione], [Dt_Creazione], IDStato, IDAzienda)
VALUES(@Nome, isnull(@Dt_Inizio, 'null'), @Fine, @Descrizione, @Dt_Creazione, @attivo, @idazienda)

ma continua a inserire 01/01/1900;
nn capisco perchè; come posso risolvere il problema?Grazie mille

LudovicoVan Profilo | Junior Member

Ciao mon,

potresti intanto mostrare come valorizzi il parametro @Dt_Inizio? -LV

Trinità Profilo | Junior Member

mi pare devi passargli il valore striga 'null'

mon78 Profilo | Junior Member

Ciao ho provato con la stringa null e funziona; il problema è che quando faccio una select, se incontra un valore null nel campo data della tabella mi visualizza il valore 01/01/1900; invece dovrebbe visualizzare la stringa vuota; come devo fare?Grazie mille

mon78 Profilo | Junior Member

Ciao, nn c'è nessuno che mi può aiutare? Grazie

mon78 Profilo | Junior Member

Ma veramente nessuno mi sa dire come risolvere il mio problema?

Brainkiller Profilo | Guru

Ciao Mon,
mi chiedo come sia possibile che se inserisci un Null ti venga ritornato 01/01/1900.
Qual è il codice c# che stai usando che ti mostra questa data invece di un null ?

ciao
david

mon78 Profilo | Junior Member

Ciao, nella web form in c# richiamo solo una stored procedure creata in sql e la faccio eseguire così:

SqlCommand cmd= new SqlCommand("SP_AnagraficaProgetto",cntDatabase);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@idprogetto",idprogetto);
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
DataSet DT=new DataSet();
adp.Fill(DT);
nometx.Text=DT.Tables[0].Rows[0]["Nome"].ToString(); txinizio.Text=Convert.ToDateTime(DT.Tables[0].Rows[0]["Dt_Inizio"]).ToShortDateString();
txfine.Text=Convert.ToDateTime(DT.Tables[0].Rows[0]["Dt_Fine"]).ToShortDateString();
txdescrizione.Text=DT.Tables[0].Rows[0]["Descrizione"].ToString();

SP_AnagraficaProgetto è una stored procedure definita in sql così:

CREATE PROCEDURE SP_AnagraficaProgetto
@idprogetto int
AS
Select * from PROGETTO where IDProgetto=@idprogetto
GO

questo è tutto; cmq per le date con valori <NULL> nella tabella mi torna 01/01/1900

LudovicoVan Profilo | Junior Member

Ciao mon,

> cmq per le date con valori <NULL> nella tabella mi torna 01/01/1900

il fatto è che Convert.ToDateTime() ritorna "zero" (cioè 01/01/1900) se il valore è una referenza nulla... dal che ne deduco che ritorna zero anche quando il valore è NULL (DBNull).

Potresti provare a riscrivere così (non uso C# quindi la sintassi è da verificare):

if(IsDBNull(DT.Tables[0].Rows[0]["Dt_Inizio"])) txinizio.Text = "";
else txinizio.Text = Convert.ToDateTime(DT.Tables[0].Rows[0]["Dt_Inizio"]).ToShortDateString();

HTH. -LV

mon78 Profilo | Junior Member

Grazie tante, come dici tu funziona, ma io dovrei gestire il tutto nella query SQL, in questo modo:

CREATE PROCEDURE [GoCRMAdmin].[SP_AnagraficaProgetto]
@idprogetto int
AS
select PROGETTO.Nome, isnull(PROGETTO.Dt_Inizio, '') as Dt_Inizio, isnull(PROGETTO.Dt_Fine, '') as Dt_Fine, PROGETTO.IDStato, PROGETTO.Descrizione, PROGETTO.IDAzienda, AZIENDA.IDAzienda, isnull (AZIENDA.Ragione_Sociale, '') AS Ragione_Sociale
from PROGETTO left outer join AZIENDA
on PROGETTO.IDAzienda=Azienda.IDAZIENDA
where IDProgetto=@idprogetto
GO

solo che nn mi funziona.Nn so come fare

LudovicoVan Profilo | Junior Member

> io dovrei gestire il tutto nella query SQL

Questo non è molto corretto, poiché il formato del dato è Datetime ed è solo al livello di pagina web che ti occorre convertirlo ad una stringa user-friendly.

Comunque, se proprio hai bisogno di farlo nell'SQL, occorre che il CONVERT lo fai nella query (e non hai tutte le opzioni di formattazione che hai in VB):
> SELECT isnull(CONVERT(char(10), PROGETTO.Dt_Inizio, 105), '') as Dt_Inizio, ...
Inoltre, in questo caso, occorre che nella pagina web leggi il valore con un semplice ToString().

Ciao. -LV
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