Leggere più record

mercoledì 25 ottobre 2006 - 09.02

Anser Profilo | Junior Member

Ciao ragazzi,
uso Visual Basic.NET 2005 su Windows Server 2003 con SQL Server 2000 SP4.

Ho un Database SQL nel quale c'e' il campo "date" e il campo "Pos".
Non essendo il campo "date" una chiave primaria ho la possibilità di averne più "Pos" per lo stesso giorno.

Volevo sapere questo.. con un comando SQL è possibile leggere tutte le "Pos" (caricandole ad esempio su un array) per un preciso giorno?

La struttura della stringa attuale è:
"SELECT date FROM table1 WHERE (date = ' " & MiaData & " ');"
Però questa mi estrapola solo l'ultima "Pos" di quel giorno..

Spero mi possiate dare una mano

Grazie in anticipo
Tms TEAM

us01739 Profilo | Expert

La data è di tipo date o varchar?
Riportaci un esempio di un valore data.
Puoi comunque provare inserendo un where del tipo...
WHERE (Data BETWEEN '10/20/2006' AND '10/24/2006')



Bye Bye

---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

Anser Profilo | Junior Member

Ciao,
allora la data è di tipo "datetime" ed è memorizzata come 25/10/2006 .. però a me interessa estrapolare tutti i record di UN giorno preciso..


Tms TEAM

us01739 Profilo | Expert

Mi sono accorto solo ora della select sbagliata:

>"SELECT date FROM table1 WHERE (date = ' " & MiaData & " ');"
>Però questa mi estrapola solo l'ultima "Pos" di quel giorno..

Se ti serve il valore di POS, non devi scrivere select date, ma select pos o al massimo select *

Prova così:"SELECT * FROM table1 WHERE (date = ' " & MiaData & " ');"



Bye Bye

---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

Anser Profilo | Junior Member

Si hai ragione .. comunque ho provato sia con "SELECT Pos...." che "SELECT * ... " ma mi estrapola sempre l'ultimo valore.. ecco un esempio del database

date Pos
23/10/2006 3
23/10/2006 15
23/10/2006 9
22/10/2006 5

Questo è il codice che uso per la lettura dei dati:

dim a as string
dim b as string

Dim leggi As OleDb.OleDbDataReader
leggi = cmd1.ExecuteReader

leggi.Read()
a = leggi(0) -> dopo questa acquisizione a=3 -> OK
b = leggi(1) -> dopo questa acquisizione Errore (Index was outside the bounds of array)
mentre vorrei leggere 15 ...

pensi sia possibile ?


Tms TEAM

us01739 Profilo | Expert

Posta anche la parte cmd1


Bye Bye

---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

lbenaglia Profilo | Guru

>allora la data è di tipo "datetime" ed è memorizzata come 25/10/2006
No, le date sono memorizzate come coppie di interi (per il data type datetime sono 2 coppie di 4 bytes ciascuna).
Quello che tu vedi è una formattazione in base alla lingua associata alla login con la quale ti sei connesso all'istanza.

>.. però a me interessa estrapolare tutti i record di UN giorno preciso..
Ora, dato che il data type datatime memorizza sia l'informazione data che quella oraria con una accuratezza di 3,33ms, se vuoi recuperare i dati di un giorno dovrai considerare l'intervallo compreso tra la mezzanotte di un dato giorno e la fine del giorno stesso.
Supponendo che la data in questione sia il 25 ottobre 2006 la tua query risulterà simile a:

SELECT col1,..., coln
FROM tabella
WHERE colData BETWEEN '20061025' AND '20061025 23:59:59.997';

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

Anser Profilo | Junior Member

Dim myconn As String = "Provider=SQLOLEDB;Server=localhost;Database=DB-TEST;Uid=sa;Pwd=prova;" 'Stringa Connessione Database SQL
Dim cnn As New OleDb.OleDbConnection
Dim cmd1 As New OleDb.OleDbCommand


cnn.Open()
cmd1.Connection = cnn
Dim dat As String = "20061023"
cmd1.CommandText = "SELECT Pos FROM Table1 WHERE (date= '" & dat & "');"




Tms TEAM

us01739 Profilo | Expert

Sono convinto che se segui i consigli di Lorenzo risolvi il problema ;-)


Bye Bye

---------------------------------------------------
Roberto Gelmini - Microsoft Certified Professional
www.robertogelmini.com
---------------------------------------------------

Anser Profilo | Junior Member

Ciao,

però la colonna che devo estrapolare è una.. cioè si chiama "Pos". Quello che a me interessa è estrapolare più righe di quella colonna (corrispondente poi alla stesso giorno) lo schema sotto rappresenta i dati di cui ho bisogno.

date Pos

23/10/2006 3
23/10/2006 15
23/10/2006 9
22/10/2006 5


E' possibile con un solo comando estrapolare i valori 3, 15 e 9 dello stesso giorno (23/10/2006) posti su righe differenti ?

Tms TEAM

lbenaglia Profilo | Guru

>E' possibile con un solo comando estrapolare i valori 3, 15 e
>9 dello stesso giorno (23/10/2006) posti su righe differenti
>?
Leggi il mio post e otterrai esattamente quel risultato.

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

Anser Profilo | Junior Member

Già... basta leggere !!


RISOLTO.. GRAZIE MILLE !!
Tms TEAM
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