Problema campi datetime

mercoledì 12 dicembre 2007 - 11.23

ReRosso Profilo | Junior Member

Ciao ragazzi....

Vorrei una piccola informazione...
Ho un db fatto con sql server 2000 in cui è contenuto un campo date-time.
Il formato dei dati è memorizzato come:

01/12/2007 00.00.00

Il problema è questo:
vorrei eliminare la parte time ("00.00.00")

E' possibile???

Grazie a tutti

alx_81 Profilo | Guru

>Ciao ragazzi....
Ciao!
>
>Vorrei una piccola informazione...
>Ho un db fatto con sql server 2000 in cui è contenuto un campo date-time.
>Il formato dei dati è memorizzato come:
>
>01/12/2007 00.00.00
>
>Il problema è questo:
>vorrei eliminare la parte time ("00.00.00")
>
>E' possibile???
Dove vuoi ottenere la parte data? Applicazione web/win con framework? asp? sempre su sql server?
Perchè quello che devi fare è una conversione su stringa della sola parte data, ma è necessario capire dove ti server per darti il metodo corretto..
>
>Grazie a tutti
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ReRosso Profilo | Junior Member

Potrebbe essere indifferente..

Comunque l'applicazione è un' asp.net 2.0

I dati devono essere recuperati in gridview...

A questo punto pero' non so' se e' meglio formattare il tutto direttamente nel db...

Dimmi tu...

Ciao e grazie

lbenaglia Profilo | Guru

>I dati devono essere recuperati in gridview...
>
>A questo punto pero' non so' se e' meglio formattare il tutto
>direttamente nel db...
>
>Dimmi tu...
In questo caso dato che l'elaborazione viene eseguta lato client direi di recuperare le informazioni come datetime e lato .net framework formattarle come meglio credi
Utilizza il metodo ToString della classe DateTime specificando ad esempio lo stile "dd/MM/yyyy":
http://authors.aspalliance.com/aspxtreme/sys/demos/datetimeformats.aspx

>Ciao e grazie
Prego.

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

alx_81 Profilo | Guru

>Potrebbe essere indifferente..
>
>Comunque l'applicazione è un' asp.net 2.0
>
>I dati devono essere recuperati in gridview...
>
>A questo punto pero' non so' se e' meglio formattare il tutto
>direttamente nel db...
>
>Dimmi tu...
stai sull'applicativo sono d'accordo con Lorenzo. Puoi utilizzare anche il metodo ToShortDateString() che ti converte nella forma breve in automatico, in base alla cultura (di default InvariantCulture è MM/dd/yyyy). Il metodo di Lorenzo ti dà con sicurezza il formato dd/mm/yyyy.
>
>Ciao e grazie
Di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ReRosso Profilo | Junior Member

TRAGICA DIMENTICANZA...

Non avevo pensato a dirvi che ovviamente devo importare sul db i dati provenienti da un vecchio db access.

Il campo datetime incriminato e' formattato in access come data/ora...

Nel momento dell'esportazione pero' ovviamente compatibilita' tra datetime e data/ora inesistente...

Ancora una volta come aggiro il problema???

Grazie ancora.

lbenaglia Profilo | Guru

>Non avevo pensato a dirvi che ovviamente devo importare sul db
>i dati provenienti da un vecchio db access.
Tramite OPENROWSET/linked server/DTS/SSIS e chi ne ha più ne metta non dovrebbero esserci problemi

>Nel momento dell'esportazione pero' ovviamente compatibilita'
>tra datetime e data/ora inesistente...
Ovvero? Esportazione dove?
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ReRosso Profilo | Junior Member

Hai ragione l'errore non e' del campo date-time.

Comunque siccome avrai capito che sono novizio in sql server, ti invio un printscreen dell'errore!!!


P.S.

Ho provato la funzione di conversione per il formato date-time; il risultato e' che quando vado a scrivere nel db, sembra filare tutto liscio...anche aprendo manualmente la tabella il campo date-time sembra formattato correttamente; ma comunque quando da applicazione il gridview recupera i dati la formattazione e' sempre quella di cui ti parlavo....

La fonte dati del gridview e' un dataset a questo punto pero' non so' se l'errore e' nell'applicazione...(il tutto comunque funzione benissimo e' soltanto una questione estetica).

Grazie per la pazienza

alx_81 Profilo | Guru

>Hai ragione l'errore non e' del campo date-time.
>
>Comunque siccome avrai capito che sono novizio in sql server,
>ti invio un printscreen dell'errore!!!
Il messaggio mi sembra eloquente , stai cercando di inserire un valore NULL nella colonna id, e sulla tabella di SQL Server il campo non è NULLABLE. Quindi ti viene restituito quel messaggio di errore. Devi controllare come mai nella sorgente hai valori null e successivamente gestirli per evitare l'eccezione.
>
>
>P.S.
>Ho provato la funzione di conversione per il formato date-time;
>il risultato e' che quando vado a scrivere nel db, sembra filare
>tutto liscio...anche aprendo manualmente la tabella il campo
>date-time sembra formattato correttamente; ma comunque quando
>da applicazione il gridview recupera i dati la formattazione
>e' sempre quella di cui ti parlavo....
>
>La fonte dati del gridview e' un dataset a questo punto pero'
>non so' se l'errore e' nell'applicazione...(il tutto comunque
>funzione benissimo e' soltanto una questione estetica).
Ma il gridview, come gestisce il campo data? postami l'aspx che gli diamo un'occhiata


Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Comunque siccome avrai capito che sono novizio in sql server,
>ti invio un printscreen dell'errore!!!
Uno zip, che contiene un .doc che contiene uno screenshot... ti piacciono le cose difficili, eh?

L'errore è di una chiarezza cristallina: la colonna "id" della tabella informatici.dbo.dipendenti non accetta valori NULL.
La riga 1992 della corrispondente tabella in Access sembra che abbia tale colonna non valorizzata (NULL appunto).

In Access prova ad eseguire una query simile a:

SELECT * FROM dipendenti WHERE id IS NULL;

In questo modo otterrai tutte le righe che hanno id non valorizzato.
Correggi il problema e riprova ad eseguire l'importazione in SQL Server 2000.

>Ho provato la funzione di conversione per il formato date-time;
>il risultato e' che quando vado a scrivere nel db, sembra filare
>tutto liscio...anche aprendo manualmente la tabella il campo
>date-time sembra formattato correttamente; ma comunque quando
>da applicazione il gridview recupera i dati la formattazione
>e' sempre quella di cui ti parlavo....
Se utilizzi i data type datetime o smalldatetime, le informazioni di data e di ora saranno SEMPRE PRESENTI.
Questi due data type memorizzano le informazioni di data e ora in due coppie di interi, uno per la parte data ed il secondo per le informazioni di tempo (con precisione e range di validità differenti).

Quindi, OGNI VOLTA che andrai a leggere i dati da visualizzare nella griglia dovrai eliminare l'informazione oraria utilizzando le tecniche che ti sono state fornite nelle precedenti risposte.

>Grazie per la pazienza
Prego.

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

ReRosso Profilo | Junior Member

Allora ecco la fregatura!!!

La riga 1992 e' l'ultima righa della tabella Access. tutti i campi sono valorizzati.

La tabella il questione non contiene un campo id, non c'e' neanche una colonna chiave...ho allora provato ad esportare la tabella in excel e a rimportare in sqlserver il foglio ottenendo lo stesso identico errore!!!

- Butto un' idea..... l'ultima righa di una tabella access e' ovviamente il record nuovo...potrebbe essere che il tool di importazione di sqlserver tenti di importare anche l'ultima righa (che corrisponde a nuovo record) andando in errore perche non valorizzato???

- oppure...sarebbe il caso di modificare la tabella access inserendo un campo contatore come chiave primaria e legarlo al campo identity in sqlserver durante le inpostazioni del tool????

Ciao.

ReRosso Profilo | Junior Member

Allora ecco il codice:

Dim cn As SqlConnection
Dim cmd As SqlCommand
cn = New SqlConnection(ConfigurationManager.ConnectionStrings("InformaticiConnectionString").ConnectionString.ToString)
cmd = New SqlCommand("SELECT [id], [anno], [mese], [giorno], [data], [reparto], [addetto], [stato], [problema] FROM [interventi] WHERE (([anno] = @anno) AND ([mese] = @mese) AND ([giorno] <= @fine) AND ([giorno] >= @inizio)) order by [data]", cn)
cmd.Parameters.AddWithValue("@anno", cmb_anno.Text)
cmd.Parameters.AddWithValue("@mese", cmb_mese.Text)
cmd.Parameters.AddWithValue("@inizio", txt_inizio.Text)
cmd.Parameters.AddWithValue("@fine", txt_fine.Text)
Dim da As New SqlDataAdapter
Dim ds As New DataSet
da.SelectCommand = cmd
cn.Open()
da.Fill(ds, "interventi")
cn.Close()
gv_int.DataSource = ds
gv_int.DataMember = "interventi"
gv_int.DataBind()


Che ne dici????

alx_81 Profilo | Guru

>Allora ecco il codice:
>
> Dim cn As SqlConnection
> Dim cmd As SqlCommand
>cn = New SqlConnection(ConfigurationManager.ConnectionStrings("InformaticiConnectionString").ConnectionString.ToString)
>cmd = New SqlCommand("SELECT [id], [anno], [mese], [giorno],
>[data], [reparto], [addetto], [stato], [problema] FROM [interventi]
>WHERE (([anno] = @anno) AND ([mese] = @mese) AND ([giorno] <=
>@fine) AND ([giorno] >= @inizio)) order by [data]", cn)
> cmd.Parameters.AddWithValue("@anno", cmb_anno.Text)
> cmd.Parameters.AddWithValue("@mese", cmb_mese.Text)
> cmd.Parameters.AddWithValue("@inizio", txt_inizio.Text)
> cmd.Parameters.AddWithValue("@fine", txt_fine.Text)
> Dim da As New SqlDataAdapter
> Dim ds As New DataSet
> da.SelectCommand = cmd
> cn.Open()
> da.Fill(ds, "interventi")
> cn.Close()
> gv_int.DataSource = ds
> gv_int.DataMember = "interventi"
> gv_int.DataBind()
>
>
>Che ne dici????
che mi servirebbe il gridview ASPX.. non VB.net..

per l'altro problema, hai eseguito la query che ti ha passato Lorenzo? perchè la 1992 non è detto che sia la stessa riga come posizione rispetto a quella caricata da DTS.. prova ad eseguire la query e controlla che effettivamente non ci siano ID null..


Alx81 =)

http://blogs.dotnethell.it/suxstellino

ReRosso Profilo | Junior Member

Comincio a collezionare brutte figure!!!!

Sai sono ancora tarato per applicazione desktop!!!

SPERO CHE INTENDI DIRE QUESTO.....

<asp:GridView ID="gv_int" runat="server" AutoGenerateColumns="False" CellPadding="5" ForeColor="#333333" GridLines="None" Height="550px" Width="850px" style="width: 900px; height: 600px; border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;" CellSpacing="1" PageSize="20" OnSelectedIndexChanged="gv_int_SelectedIndexChanged" TabIndex="16">
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<EditRowStyle BackColor="#999999" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:CommandField ShowSelectButton="True" ButtonType="Button" HeaderText="Generale:" >
<HeaderStyle Font-Size="10pt" />
</asp:CommandField>
<asp:BoundField DataField="id" HeaderText="ID:" InsertVisible="False" ReadOnly="True"
SortExpression="id" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>
<asp:BoundField DataField="data" HeaderText="Data:" SortExpression="data" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>
<asp:BoundField DataField="reparto" HeaderText="Reparto:" SortExpression="reparto" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>
<asp:BoundField DataField="addetto" HeaderText="Addetto:" SortExpression="addetto" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>
<asp:BoundField DataField="stato" HeaderText="Stato:" SortExpression="stato" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>
</Columns>
<PagerSettings Mode="NumericFirstLast" PageButtonCount="20" />
</asp:GridView>

Nel db accesso ci sono voci null ma le corrispondenti voci sqlserver sono tutte nullabili; l'unica voce non nullabile e' id che ovviamente e' impostata come identity ed e' campo chiave.
Nel tool pero' imposto che il campo id di sqlserver deve essere ignorato cofidando che quel campo venga autoinserito durante l'importazione (forse pero' sono ottimista...)

Ancora grazie

alx_81 Profilo | Guru

>Comincio a collezionare brutte figure!!!!
ma va.. non ti preoccupare
>
>Sai sono ancora tarato per applicazione desktop!!!
>
>SPERO CHE INTENDI DIRE QUESTO.....


><asp:BoundField DataField="data" HeaderText="Data:" SortExpression="data" >
><HeaderStyle Font-Size="10pt" />
></asp:BoundField>
In questo caso, visualizzi la data come ti arriva da database, ma poi probabilmente il gridview di riformatta in base alla culture dell'applicazione. Prova ad utilizzare un templatefield al cui interno scrivi non il dato così come ti arriva, ma convertito col primo metodo che ti consiglia Lorenzo (ToString("dd/mm/yyyy")). Qualcosa tipo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Nel db accesso ci sono voci null ma le corrispondenti voci sqlserver
>sono tutte nullabili; l'unica voce non nullabile e' id che ovviamente
>e' impostata come identity ed e' campo chiave.
>Nel tool pero' imposto che il campo id di sqlserver deve essere
>ignorato cofidando che quel campo venga autoinserito durante
>l'importazione (forse pero' sono ottimista...)
Se fai ignorare il campo dovrebbe inserire l'identità effettivamente. Purchè tu l'abbia dichiarata IDENTITY nella tabella di destinazione.
Anzi, ignorando eviti un altro errore che è la violazione di accesso al campo id che sarebbe read only e quindi non in scrittura.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ReRosso Profilo | Junior Member

Dopo che mi hai citato l'ASPX....mi sono illuminato!!!

E ho inserito ne l codice questo:

<asp:BoundField DataField="data" HeaderText="Data:" SortExpression="data" DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="false" >
<HeaderStyle Font-Size="10pt" />
</asp:BoundField>

adesso sembra essere tutto ok...almeno spero.

Per quello che riguarda il db invece...
-Ho aggiunto un campo "id" contatore nella tabella access
-dalla tabella "interventi" di sqlserver ho tolto la proprietà campo chiave e identity dal campo "id" impostandolo come normale int
-Ho importato i dati con il tool(stavolta senza errori).
-Infine ho nuovamente impostato il campo "id" come campo chiave e identity.

Anche qui sembra tutto ok...

Speriamo che in fase di testing non ci siano sorprese!!!

Grazie per la disponibilità e a presto....

P.S. Ti accetto il post al volo!!!
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