Incorrect syntax near '.2009'.   otázka

ASP.NET WebForms

Zdravím

Mám takový problém při práci s datem. Používám funkci:

    Public Function Representation(ByVal ActivePerson As Int64, ByVal DocumentId As Int64) As Int64
        Dim msql, usql As String
        Dim rp As Int64
        Dim datum As Date = Date.Now

        msql = "select * from tblRepresentation where DateTo > " + datum + " AND UserId = " + Str(ActivePerson) + ";"
        Dim sds As New SqlDataSource(cts.ConnectionString, msql)
        Dim rs As DataView = sds.Select(DataSourceSelectArguments.Empty)
        If rs.Count > 0 Then
            rp = Val(rs.Item(0).Row("AssistantId").ToString)
        Else
            rp = 0
        End If

        'v rp mame zástupce

        Return rp
    End Function

a na řádku Dim rs As DataView = sds.Select(DataSourceSelectArguments.Empty) mi to napíše chybu Incorrect syntax near '.2009'.

Data v SQL mám ve formátu datetime tedy například 31.7.2009 0:00:00

Uvítám jakoukoli radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím to sice na 100%, ale myslím si, že už ten select je asi špatně postavenej. Už jenom to, že do proměnné typu string připojujete proměnnou typu datetime. Navic musíte dodržovat standarty SQL dotazu. Jako např. datum musí mít třeba tvar

{TS'2009-07-23 00:00:00'}.Proč to neřešíte přes parametry dotazu.

SqlDataAdapter da = new SqlDataAdapter():

SqlParameter dtParameter= new SqlParameter("@DATETIME", 
SqlDbType.DateTime);
dtParameter.Value = DateTime.Now;

da.SelectCommand ="select * from tblRepresentation where DateTo >@DATETIME";
da.SelectCommand.Parameters.Add(dtParameter);

Nevim jestli vám to pomůže, ale lepší než drátem do oka.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Máte pravdu, bylo to celé tím stringem, vyřešil jsem to následovně a už to funguje přesně jak jsem chtěl. Díky

    Public Function Representation(ByVal ActivePerson As Int64, ByVal DocumentId As Int64) As Int64
        Dim msql, usql As String
        Dim rp As Int64
        Dim datum As String = Date.Now

        msql = "select * from tblRepresentation where DateTo > @DateTo AND UserId = " + Str(ActivePerson) + ";"
        Dim sds As New SqlDataSource(cts.ConnectionString, msql)
sds.SelectParameters.Add("DateTo", DbType.DateTime, datum)
        Dim rs As DataView = sds.Select(DataSourceSelectArguments.Empty)
        If rs.Count > 0 Then
            rp = Val(rs.Item(0).Row("AssistantId").ToString)
        Else
            rp = 0
        End If

        'v rp mame zástupce

        Return rp
    End Function

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tohle skládání dotazu důrazně nedoporučuju. Jednak kvůli bezpečnosti (je zde o tom článek, myslím v souvislosti s tvorbou webových stránek) a jednak proto, že přesunete databázi na server kde je nastavena jiná jazyková kultura (o tom zde také je článek) a je problém. Mluvím z vlastní zkušenosti.

Přebral jsem po někom jednu aplikaci a po půl roce byl proveden přesun ze serveru s CZ windows server na server s ENG windows server. (jiná jazyková kultura a jiný formát data). Jednak klientská část byla také dělána skládáním stringů a jednak i na SQL serveru byla vetšina hodnot datetime uložena jako varchar! (kolega si asi neuměl poradit s tím, SQL server nemá samostatnou hodnotu pro date). Bylo zde několik funkcí které s tímto "datem" počítali (tzn. několik konverzí, castování stringu apod.) Úprava tak aby to správně fungovalo byla opravdovou lahůdkou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback