Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
select cast(convert(nvarchar(10), DateField, 112) as datetime) as TheDate, HostAddress, Count(*) as UniqueCount from LogTabel group by cast(convert(nvarchar(10), DateField, 112) as datetime), HostAddress
select cast(convert(nvarchar(10), DateField, 112) as datetime) as TheDate, Count(HostAddress) as UniqueIPCount from LogTabel group by cast(convert(nvarchar(10), DateField, 112) as datetime)
select cast(convert(nvarchar(10), DateField, 112) as datetime) as TheDate, Count(distinct HostAddress) as UniqueIPCount from LogTabel group by cast(convert(nvarchar(10), DateField, 112) as datetime)
select cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate, count(distinct HostAddress) from LogTabel group by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
Du skal ikke bruge ExecuteScalar, da der returneres et dataset.
dim Result as Integer = 0 dim rs as SqlDataReader rs = oCommand.ExecuteReader() Result = CType(rs("DistinctCount"), Integer) return Result
Dette kræver, at ændrer SQL til:
select cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate, count(distinct HostAddress) as DistinctCount from LogTabel group by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
select count(distinct HostAddress), cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from LogTabel group by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
Din kode ændrer du til ExecuteScalar() indstillingen.
Ifølge MSDN returneres det første felt i den første række af ExecuteScalar().
Public Function CountUniqueHostAddressPrDay() As String Dim oConnection As New SqlConnection(DB("Telelet")) Dim oCommand As New SqlCommand Dim Result As String Try oConnection.Open() With oCommand .CommandText = "Test" .CommandType = CommandType.StoredProcedure .Connection = oConnection Result = CType(.ExecuteScalar(), String) End With
Return Result Catch ex As Exception LogErrorEvent(ex.ToString) Throw ex End Try End Function
select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from LogTabel order by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
Du kan evt. sætte desc efter cast-delen i order by.
Hvordan du fylder drop down listen er mere et spørgsmål til VB.NET gruppen.
Er det ASP.Net, du arbejder i? Hvis så, så sørg for at bruge Ctrl-F5 til at genopfriske browser-vinduet, når du skal teste. F5 er ikke altid nok til at gennemtvinge ændringer i bagved liggende kode.
Jeg ved nu godt hvordan man fylder en dropliste, men man kan jo ikke ligefrem lave en DISTICNT i SQL'en på de datoer pga der er klokkeslet bagved 28-08-2003 09:29:30
Så skal jeg fjerne tiden og smide den i et seperat felt eller hvad?
select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from LogTabel order by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
Du kan evt. sætte desc efter cast-delen i order by.???
Brug den SQL, jeg smed i svaret af 28/08-2003 11:11:54. Den sørger for at rense dato-feltet for tidsinformation (returnerer datoen med tom tid (00:00:00.000))
select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from tblLog order by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
Public Function CountUniqueHostAddressPrDay(ByVal day As String) As String Dim oConnection As New SqlConnection(DB("Telelet")) Dim oCommand As New SqlCommand Dim Result As String Try oConnection.Open() With oCommand .CommandText = "Test" .CommandType = CommandType.StoredProcedure .Connection = oConnection .Parameters.Add("@Day", day) Result = CType(.ExecuteScalar(), String) End With
Return Result Catch ex As Exception LogErrorEvent(ex.ToString) 'StatusMail(ex.ToString) Throw ex Finally If Not oConnection Is Nothing Then If oConnection.State <> ConnectionState.Closed Then oConnection.Close() End If oConnection.Dispose() oConnection = Nothing End If End Try End Function
den tager parametren day, som er den der bliver valgt fra droplisten...
og SQL ser sådan ud:
CREATE PROCEDURE dbo.Test (@day varchar) AS
select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from tblLog order by cast(convert(nvarchar(10), DateAdded, 112) as datetime) GO
select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from tblLog WHERE @day = DateAdded order by cast(convert(nvarchar(10), DateAdded, 112) as datetime) GO
Der er en procedure, som returnerer det unikke antal IP-adresser per dag. Den her et udseende.
Der er en procedure/sql script, som returnerer de unikke dage til brug i en drop-list. Den har et andet udseende:
Returnering af IP-count per dag med dato som parameter:
<SQL> create procedure dbo.Test (@day datetime) as select count(distinct HostAddress) from LogTabel where cast(convert(nvarchar(10), DateAdded, 112) as datetime) = @day </SQL>
Returnering af unikke datoer til drop-list (dataset) <SQL> create procedure dbo.TestDatoer as select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from tblLog order by cast(convert(nvarchar(10), DateAdded, 112) as datetime) </SQL>
droplisten skal du udfylde via den dbo.TestDatoer.
I din funktion CountUniqueHostAddressPrDay skal du bruge dbo.Test.
Desuden bør du sørge for at arbejde med DateTime variabler i stedet for strings.
Spørgsmålet her er, om SQL Statements virker. Hvordan du bruger det returnerede i VB.Net hører IMHO hjemme i den kategori.
create procedure dbo.TestDatoer as select distinct cast(convert(nvarchar(10), DateAdded, 112) as datetime) as AddedDate from tblLog order by cast(convert(nvarchar(10), DateAdded, 112) as datetime)
jeg binder mine data til listen således:
Dim obj As New Library.Util With ddlDays .DataSource = obj.FillDropListWithDays .DataTextField = "DateAdded" .DataValueField = "DateAdded" .DataBind() End With
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.