Avatar billede tanzaweb Nybegynder
23. marts 2004 - 10:06 Der er 15 kommentarer og
1 løsning

Syntax error in INSERT INTO statement med Session i C#

Hej jeg får følgende fejl med insert sætning i kob tabellen.

System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement.
i linje 48
Line 46:             myConnection.Open();
Line 47:             OleDbCommand myCommand = new OleDbCommand(strSQL, myConnection );
Line 48:             myCommand.ExecuteNonQuery();
Line 49:             myConnection.Close();
Line 50:             }

Jeg forsøger at læggen en session med ind i tabellen, men jeg ved ikke hvad der er galt her, jeg tænker lidt på onm det kan være prisen som er sat til currency i rækken vPris

Her er hele min kode:

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<% string title;
    title = "Varekøb i valgte kategori";
    Session["session_id"] = Session.SessionID;
%>

<script runat="server">


    void Page_Load(object Sender, EventArgs E)
            {

            string strConnection;
                    string strSQL;
                    OleDbConnection objConnection;
                    OleDbCommand objCommand;
                    strConnection =@"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath("/datab/abcd.mdb");
                    objConnection = new OleDbConnection(strConnection);
                    objConnection.Open();
                    strSQL = "SELECT * FROM varelist WHERE vNummer = " + Request.QueryString["id"];
                    objCommand = new OleDbCommand(strSQL, objConnection);
                    tojData.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
                    tojData.DataBind();

                    objConnection.Close();
            }
            void kob(object Sender, EventArgs E)
            {
            string strNummer, strNavn, strSession, strAntal, strPris;
        string strSQL;
        strSession = Request.QueryString["session_id"];
        strNummer = Request.QueryString["tbvNummer"];
        strNavn = Request.QueryString["tbvNavn"];
        strPris = Request.QueryString["tbvPris"];
        strAntal = Request.QueryString["tbvAntal"];
        strSQL = "INSERT INTO kurv (sessionID, vNummer, vNavn, vPris, vAntal) Values ('";
            strSQL += strSession + "', ";
            strSQL += strNummer + ", '";
            strSQL += strNavn + "', ";
            strSQL += strPris + ", ";
            strSQL += strAntal + ")";
            //Response.Write(strSQL);
            OleDbConnection myConnection = new OleDbConnection(@"Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath("/datab/abcd.mdb"));
            myConnection.Open();
            OleDbCommand myCommand = new OleDbCommand(strSQL, myConnection );
            myCommand.ExecuteNonQuery();
            myConnection.Close();
            }

</script>
<!-- #include file="head.aspx" -->

        <table>
<tr>
  <td>
  <h4>Varedetaljer</h4>
  </td>
</tr>
<tr>
  <td>
<asp:DataList ID="tojData" runat="server" ItemStyle-Font-Name="Arial">
<itemtemplate>
<table>
    <tr>
        <th align="left" bgcolor="#FFCCFF" class="mainFont">Vare Nummer:</th><th align="left" bgcolor="#FFCCFF" class="mainFont">Vare navn:</th><th align="left" bgcolor="#FFCCFF" class="mainFont">Pris:</th>
    </tr>
    <tr>
        <td class="mainFont"><%# DataBinder.Eval(Container.DataItem, "vNummer") %><asp:textbox Visible="false" ID="tbvNummer" Text='<%# DataBinder.Eval(Container.DataItem, "vNummer") %>' /></td><td class="mainFont"><%# DataBinder.Eval(Container.DataItem, "vNavn") %><asp:textbox Visible="false" ID="tbvNavn" Text='<%# DataBinder.Eval(Container.DataItem, "vNavn") %>' /></td><td class="mainFont"><%# DataBinder.Eval(Container.DataItem, "vPris","{0:C}") %><asp:textbox Visible="false" ID="tbvPris" Text='<%# DataBinder.Eval(Container.DataItem, "vPris","{0:C}") %>' /></td>
    </tr>
    <tr>
        <th colspan="2" align="left" bgcolor="#FFCCFF" class="mainFont">Beskrivelse:</th><th align="left" bgcolor="#FFCCFF" class="mainFont">Billede:</th>
    </tr>
    <tr>
        <td valign="top" colspan="2" class="mainFont"><%# DataBinder.Eval(Container.DataItem, "vBeskriv") %><br />
        <br /><br />
        Antal: <asp:TextBox ID="tbvAntal" Width="30" Font-Name="arial" MaxLength="3" runat="server" />&nbsp;
        <asp:Button ID="btKob" OnClick="kob" runat="server" Text="Tilføj vare"/>
        </td><td><img src='<%# "/abcdAdmin/uploadedfiles/"+DataBinder.Eval(Container.DataItem, "vBilled") %>' border="0" ></td>
    </tr>
</table>
</itemtemplate>
</asp:DataList>
    <br /><br />
    <a href="java script:history.back(-1)" class="mainlinks">Tilbage</a>
    </td>
</tr>
</table>
<!-- #include file="footer.aspx" -->
Avatar billede dgivoni Nybegynder
23. marts 2004 - 10:20 #1
Jeg er ret sikker paa at det er den samme fejl, som vi fandt en loesning paa den anden dag, dvs. med prisen, som indeholder komma i stedet for punktum, som decimal-separator. Har du proevet at lave en replace paa den?
Avatar billede tanzaweb Nybegynder
23. marts 2004 - 10:38 #2
Nej for jeg er ikke gelt sikker på hvordan jeg skal placere replacen når jeg har udskiftet den med strPris = Request.QueryString["tbvPris"];
i stedet for strvPris = Convert.ToSingle(tbvPris.Text);
for jeg fik en fejl i strSQL += strvPris.ToString().Replace("," , ".") + ", "; når jeg brugte strPris = Request.QueryString["tbvPris"]; istedet
Avatar billede tanzaweb Nybegynder
23. marts 2004 - 10:41 #3
Jeg får denne fejl hvis jeg forsøger som før, og hvis jeg ændre den så laver den fejl i den anden replace sætning

The type or namespace name 'tbvPris' could not be found (are you missing a using directive or an assembly reference?)
Linje 36

Line 34:         strNummer = Request.QueryString["tbvNummer"];
Line 35:         strNavn = Request.QueryString["tbvNavn"];
Line 36:         strPris = Convert.ToSingle(tbvPris.Text);
Line 37:         strAntal = Request.QueryString["tbvAntal"];
Line 38:         strSQL = "INSERT INTO kurv (sessionID, vNummer, vNavn, vPris, vAntal) Values ('";
Avatar billede tanzaweb Nybegynder
23. marts 2004 - 10:45 #4
med
Line 40:             strSQL += strNummer + ", '";
Line 41:             strSQL += strNavn + "', ";
Line 42:             strSQL += strPris.ToString().Replace("," , ".") + ", ";
Line 43:             strSQL += strAntal + ")";
Line 44:             //Response.Write(strSQL);

Og denne strPris = Request.QueryString["tbvPris"];

Kommer følgende fejl

Object reference not set to an instance of an object.?
Avatar billede dgivoni Nybegynder
23. marts 2004 - 11:00 #5
The type or namespace name 'tbvPris' could not be found (are you missing a using directive or an assembly reference?)
- betyder at kompileren ikke kan finde forbindelsen mellem tbvPris-variablen og den kontrol du har paa siden. Enten har du ikke defineret den (rigtigt), eller ogsaa er skal du tilgaa den via dens "moder"-kontrol.

Object reference not set to an instance of an object.?
- betyder at objektet (strPris?) ikke er blevet initialiseret.

Jeg kan ud fra dine eksempler ikke helt se, hvorfor det sker, men det undrer mig lidt at du skal have fat i variablerne via Request.QueryString? Du burde kunne finde dem via de parametre som sendes med klik-eventen.
Avatar billede tanzaweb Nybegynder
23. marts 2004 - 11:09 #6
ja det syntes jeg også så jeg skal have kigget på den hvorfor den ikke kan finde dem uden.
Avatar billede tanzaweb Nybegynder
23. marts 2004 - 11:12 #7
Som du kan se her bruger jeg følgende for at den kan hente oplysningerne med over en textbox med visible set til false, så den ikke ses.

<td class="mainFont">
<%# DataBinder.Eval(Container.DataItem, "vNavn") %>
<asp:textbox Visible="false" ID="tbvNavn" Text='<%# DataBinder.Eval(Container.DataItem, "vNavn") %>' />
</td>
Så det må være her fejlen er, men hvordan kan jeg ellers lave den.
Avatar billede dgivoni Nybegynder
23. marts 2004 - 11:20 #8
Ja, det er problemet.
Visible=false betyder at kontrollen overhovedet ikke renderes i html-outputtet. Saa det er derfor kompileren brokker sig.
Avatar billede dgivoni Nybegynder
23. marts 2004 - 11:21 #9
I stedet for er du nok noedt til at bruge en HtmlInputHidden control, dvs.
<input type="hidden" id="tbvPris" runat="server">
Avatar billede tanzaweb Nybegynder
24. marts 2004 - 10:55 #10
ja det har jeg også tænkt på men så får du jo nogle celler der kan rettes i og det er ikke meningen.
Når jeg skriver følgende ud: <%# DataBinder.Eval(Container.DataItem, "vNavn") %>
så håbede jeg på den kunne sende id videre herfra, og da den ikke gjorde dette prøvede jeg <asp:textbox men det virker heller ikke. Hvis jeg skal gøre det uden textbox / input er der nogle forslag til hvordan så?
Avatar billede dgivoni Nybegynder
24. marts 2004 - 11:05 #11
Hvordan kan brugeren aendre i en inputbox der er hidden? Er det i forhold til hackere du mener? Saa er det jo noget med ikke at acceptere form-submits fra andre servere, saa vidt jeg ved.
Jeg kan ikke lige se hvordan du kan overfoere en variabel, som brugeren ikke skal se, paa andre maader.
Avatar billede dgivoni Nybegynder
30. marts 2004 - 12:49 #12
Har du fundet en loesning?
Avatar billede tanzaweb Nybegynder
30. marts 2004 - 13:13 #13
jeg skal til at test det nu her i ugen.
Har stået lidt stille pga. sygdom, vender stærkt tilbage
Avatar billede dgivoni Nybegynder
30. marts 2004 - 13:27 #14
ok :)
Avatar billede tanzaweb Nybegynder
17. maj 2004 - 14:18 #15
send svar for point, har dog ikke fået det prøvet af endnu
Avatar billede tanzaweb Nybegynder
21. juni 2004 - 14:29 #16
der er nu gået over en månede siden dgivoni skulle sende svar, men der er ikke kommet noget, hvis du ønsker pointen så send en kommentar, og jeg vil sende dig nogle point, men her bliver der lukket nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester