20. oktober 2007 - 02:03Der er
7 kommentarer og 1 løsning
Fra dato - til Dato (sql sætning og to tekstbokse)
Jeg havde tidligere en sql-select sætning, der virkede med en Access database i en Webform. Det samme sql sætning virker nu ikke, når jeg bruger en sql database.
Der har jeg to tekstbokse, der vha. javascript viser 2 kalendere. Her vælger man to datoer (i string formatet 'yyyy-MM-dd') og mening er at sql-sætningen tæller hvormange entries for registreringsdatoer(Reg_tid) er der i databasen plus total og hvis jeg når det, procenten.
Der er to tabeller: Resultat og Henvender, der relaterer med hindanden med HenvenderID. Her er min sql-sætning, der ikke virker. Der vises intet på griden (kun feltnavne!):
strSql = "SELECT Henvender.Henvender, Count(Reg_tid) AS 'Antal i perioden',(SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between 'Fra.Text' AND 'Til.Text')) AS [Total i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between 'Fra.Text' AND 'Til.Text') Group by Henvender.Henvender"
strSql = "SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden],(SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Total i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "') Group by Henvender.Henvender"
strSql = "SELECT Henvender.Henvender, Sum(IIf((Resultater.Reg_tid BETWEEN '" + Fra.Text + "' And '" + Til.Text + "'), 1, 0)) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultater AS R WHERE R.Reg_tid BETWEEN '" + Fra.Text + "' AND '" + Til.Text + "') AS [Total i perioden], Int(Sum(IIf((Resultater.Reg_tid BETWEEN '" + Fra.Text + "' And '" + Til.Text + "'), 1, 0)) * 100 / (SELECT Count(R.Reg_tid) FROM Resultater AS R WHERE R.Reg_tid BETWEEN '" + Fra.Text + "' AND '" + Til.Text + "') * 100) / 100 AS [Procenttal i perioden] FROM Henvender INNER JOIN Resultater ON Henvender.Henvender_ID = Resultater.Henvender_ID GROUP BY Henvender.Henvender;";
Så får jeg følgende fejl: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'BETWEEN'. Incorrect syntax near the keyword 'AS'. Incorrect syntax near '*'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning ........... ...........
Jeg har skrevet en 'stored procedure' i Managemaent Studio: ---------- USE [BBSQ_tmt] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[z_statistik]
@Fra varchar(50), @Til varchar(50) AS BEGIN SET NOCOUNT ON; SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '@Fra' AND '@Til')) AS [Total i perioden], (Count(Reg_tid)*100)/ (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '@Fra' AND '@Til')) AS [Procent i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between '@Fra' AND '@Til') Group by Henvender.Henvender END -------- Her virker det fint, men hvordan kan jeg bruger den i min cs-kode i VS med hensyn til to tekstfelt: Fra og Til? Og skal jeg bruge RataReader metode for at bringe det til at virke? Nu bruger jeg dataset og dataview. Til sidst men ikke mindst ville jeg gerne vise 2 decimaler i beregning af procenten. Hvordan?:
SqlConnection conHenvender = new SqlConnection(WebConfigurationManager.ConnectionStrings["BBSQ_tmt_ConnectionString1"].ConnectionString); DataView dvw; DataSet ds = new DataSet(); string strSQL; strSQL = "SELECT Henvender.Henvender, Count(Reg_tid) AS [Antal i perioden], (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Total i perioden], (Count(Reg_tid)*100)/ (SELECT Count(R.Reg_tid) FROM Resultat AS R WHERE (R.Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "')) AS [Procent i perioden] From Resultat INNER JOIN Henvender ON Resultat.HenvenderID = Henvender.HenvenderID WHERE (Reg_tid Between '" + Fra.Text + "' AND '" + Til.Text + "') Group by Henvender.Henvender";
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.