Avatar billede m_smiszek Nybegynder
30. maj 2007 - 13:40 Der er 13 kommentarer og
1 løsning

Must declare the scalar variable

Hej Allesammen,

Jeg sidder og roder med noget asp.net.

Og skal have defineret en variabel, i en sql sætning.

Her er min kode:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim side As Decimal = Request("side")
        SqlDataSource2.SelectCommand = "SELECT * FROM CV WHERE id=@side"
       

End Sub

Burde være lige ud af landevejen, ikke den mest advanceret kode.

Jeg får denne fejl:

Must declare the scalar variable "@side".
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Must declare the scalar variable "@side".

------

Jeg er lige begyndt på asp.net, har arbejdet en masse med php, burde dette ikke kunne lade sig gøre i asp.net ?

Mvh Mikkel
Avatar billede thanse21 Nybegynder
30. maj 2007 - 13:46 #1
I din selectcommand skal du give @side en værdi

enten kan du:

"Select * FROM CV where id = '"+side+"'"

ellers er det en god ide at bruge parametre
Avatar billede dr_chaos Nybegynder
30. maj 2007 - 13:46 #2
Du mangler formodentligt at knytte parameteren til sqldatasourcen:
<asp:SqlDataSource ID="SqlDataSource2" runat="server"  SelectCommand="SELECT * FROM CV WHERE id=@side" ConnectionString='<%$ ConnectionStrings:ComMapConnectionString %>'
        DataSourceMode="DataReader">
    <SelectParameters>
    <asp:QueryStringParameter Name="side" Type="int32" QueryStringField="side" />
        </SelectParameters>
        </asp:SqlDataSource>
Avatar billede dr_chaos Nybegynder
30. maj 2007 - 13:47 #3
På den måde som jeg har vist kan du droppe:
Dim side As Decimal = Request("side")
SqlDataSource2.SelectCommand = "SELECT * FROM CV WHERE id=@side"
Avatar billede m_smiszek Nybegynder
30. maj 2007 - 14:12 #4
Dr_Chaos,

Dette giver samme resultat. Jeg tror jeg definere variablen forkert.

Kan bare ikke lige helt se mig ud af hvordan.

Jeg vedhæfter lige hele koden.

Default.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<link rel="stylesheet" type="text/css" href="style.css" title="Default" />
    <title>smiszek.dk</title>
</head>
<body>
<form id="form1" runat="server">
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:smiszek.dkConnectionString %>" SelectCommand="SELECT * FROM dbo.CV"/>
<asp:SqlDataSource runat="server" ID="SqlDataSource2" ConnectionString="<%$ ConnectionStrings:smiszek.dkConnectionString %>" SelectCommand="SELECT * FROM CV WHERE id=@side"/>     
<div>
<div id="top_yellow">
<div id="headline">
  <img src="http://smiszek.dk/images/gfx_images/shared/smiszek_dk.gif" />
</div>
</div>
<div id="container">
<div id="picture_yellow">
</div>
<div id="submenu_yellow">
  <div class="submenuframe_yellow">
  <div class="submenuframehead_yellow"><h2>Menu:</h2></div>
  <div class="submenuframebody_yellow">
    <ul>
    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
    <ItemTemplate>
    <li><a href="Default.aspx?side=<%# eval("Id") %>"><%#Eval("Overskrift")%></a></li>
    </ItemTemplate>
    </asp:Repeater>
    </ul>
  </div>
  </div>
</div>
<div id="indhold_yellow">
    <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource2">
    <ItemTemplate>
    <%#Eval("Overskrift")%>
    </ItemTemplate>
    </asp:DataList>
</div>
</div>
<div id="bund">
<p>Hostet and powered by <a href="http://spooze.smiszek.dk">spooze.smiszek.dk</a> | Uptime: <? echo $uptime; ?> | Copyright © 2006 Mikkel Smiszek</p>
</div>
</div>
</form>
</body>
</html>

default.aspx.vb:



Partial Class _Default

    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim side As Decimal = Request("side")
        SqlDataSource2.SelectCommand = "SELECT * FROM CV WHERE id=@side"
       

    End Sub
End Class
Avatar billede m_smiszek Nybegynder
30. maj 2007 - 14:46 #5
Bump, ingen bud. ER det så klam en kode ?
Avatar billede neoman Novice
30. maj 2007 - 15:01 #6
Næh - du har bare ikke fulgt nogen af de forslag som blev give,  og derfor får du stadig fejl.

Prøv nu at tage hele dr chaos's forslag :

<asp:SqlDataSource ID="SqlDataSource2" runat="server"  SelectCommand="SELECT * FROM CV WHERE id=@side" ConnectionString='<%$ ConnectionStrings:ComMapConnectionString %>'
        DataSourceMode="DataReader">
    <SelectParameters>
    <asp:QueryStringParameter Name="side" Type="int32" QueryStringField="side" />
        </SelectParameters>
        </asp:SqlDataSource>

så henter datasourcen selv query parameteren "side", og du kan smide

        Dim side As Decimal = Request("side")
        SqlDataSource2.SelectCommand = "SELECT * FROM CV WHERE id=@side"

ud fra din pageLoad

Ellers, tag thanse21's forslag.
Avatar billede neoman Novice
30. maj 2007 - 15:07 #7
og ved nærlæsning skal
<asp:QueryStringParameter Name="side" Type="int32" QueryStringField="side" />

nok være
<asp:QueryStringParameter Name="@side" Type="int32" QueryStringField="side" />
Avatar billede m_smiszek Nybegynder
30. maj 2007 - 15:13 #8
Sorry, Jeg havde pastet, en noget "gammel" kode.

Jeg fandt en tastefejl efter jeg havde prøvet DR_chaos bud, det ser ud til at virke nu

Takker
Avatar billede m_smiszek Nybegynder
30. maj 2007 - 15:49 #9
Hej igen,

Nå, det hele ser ud til at virke, borset fra at jeg har html i min colum.

Så jeg får en masse \r\n 'er....

Nogen nem måde at undgå dette ?
Avatar billede dr_chaos Nybegynder
31. maj 2007 - 10:29 #10
prøv med:
  <%# Server.HtmlDecode(Eval("Overskrift").ToString)%>
Eller
<%# Server.HtmlEncode(Eval("Overskrift").ToString)%>

Hvis det ikke virker som skal du ind og replace

Eval("Overskrift").ToString.Replace("\n","<br />") eller noget i den stil.
Avatar billede m_smiszek Nybegynder
31. maj 2007 - 11:34 #11
Super, det virker jeg takker og lukker denne :-)
Avatar billede dr_chaos Nybegynder
31. maj 2007 - 17:07 #12
Det var vel ikke meningen at du skulle tage de 30 point selv ?
Avatar billede m_smiszek Nybegynder
20. juni 2007 - 12:57 #13
Nej det var det slet ikke, det var en fejl.
Dr_shaos, hvis du venligst vil sende et svar, så du kan få dine point.

Jeg beklager den lange svar tid, har ikke set denne port før nu.
Avatar billede dr_chaos Nybegynder
20. juni 2007 - 14:03 #14
Hej Det kan jeg ikke når du har har accepteret et svar.
Du skal oprette et nyt spørgsmål, hvor jeg kan ligge et svar.
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