Solved

'Must declare the scalar variable " Error with asp.net gridview

Posted on 2008-06-20
6
2,495 Views
Last Modified: 2010-04-21
I am trying to add the delete function to a grid view and am getting the 'Must declare the scalar variable "@SaleRef" error. I have looked at other forums and the common problem seems to be not delclaring the parameter and not having DataKeyNames set. I think I have done this (see code).

I've looked at this for so long I can't see where I've gone wrong...

Thanks for your help
<form id="form1" runat="server">
    <div>
<asp:SqlDataSource ID="SqlDataSource1" 
     Runat="server"
     ConnectionString="Server=mysqlserver; Database=mydb; User ID=myuserid; Password=mypass;"
					DeleteCommand="DELETE FROM [SaleRef] WHERE [SaleRef] = @SaleRef"
					SelectCommand="SELECT [SaleRef], [ClosingDate], [ClosingTime] FROM [SaleDetails]"
            providerName="System.Data.SqlClient">
			<DeleteParameters>
                <asp:Parameter Name="SaleRef" Type="Int32" />
            </DeleteParameters>
</asp:SqlDataSource>
 
    </div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#FFE0C0"
            BorderColor="black" BorderStyle="Solid" BorderWidth="5px" DataKeyNames="SaleRef"
            DataSourceID="SqlDataSource1" EmptyDataText="There are no sales" Font-Names="Verdana"
            Font-Size="Small" GridLines="None">
			<Columns>
                <asp:CommandField ShowDeleteButton="True" ButtonType="Button" DeleteText="Delete Sale" />
				<asp:BoundField DataField="SaleRef" HeaderText="Sale #" />
                <asp:BoundField DataField="closingdate" HeaderText="Closing Date" HtmlEncode="False" />
                <asp:BoundField DataField="closingtime" HeaderText="Closing Time" HtmlEncode="False" />
            </Columns>
            <HeaderStyle BackColor="Green" Font-Size="small" Font-Underline="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="#E0E0E0" />
        </asp:GridView>
    </form>

Open in new window

0
Comment
Question by:kirkheaton25
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 
LVL 43

Expert Comment

by:TimCottee
ID: 21829956
Hello kirkheaton25,

                  <asp:Parameter Name="SaleRef" Type="Int32" />
Should be
                  <asp:Parameter Name="@SaleRef" Type="Int32" />

Regards,

TimCottee
0
 
LVL 1

Author Comment

by:kirkheaton25
ID: 21829999
Thanks, however after making that change I now get the message:
Invalid object name 'SaleRef'. Any ideas?
0
 
LVL 21

Expert Comment

by:naspinski
ID: 21830010
Tim, I think he is ok with his declaration.

I think what you are missing is a way to declare your SaleRef, you never state which one to delete.

Usually this is in a SessionParameter, ControlParameter or QueryStringParameter.  Yours is simply a Parameter so the program does not know which one to delete.  You have to make sure you specify that.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Author Comment

by:kirkheaton25
ID: 21830459
Hi Naspinski,
Isn't the SaleRef value being sent through the postback when I click the delete button?
(From the grid source code: __doPostBack('GridView1','Delete$2')".)
Is this a ControlParameter, it shouldn't be SessionParameter or QueryStringParameter should it?
0
 
LVL 21

Accepted Solution

by:
naspinski earned 500 total points
ID: 21830508
You are corerct, I didn't realize you were populating them automatically.  I think I see what the problem is.  Your DeleteCOmmand is: "DELETE FROM [SaleRef] WHERE [SaleRef] = @SaleRef"
But it looks like your DB is SaleDetails, so I think the SaleRef we are looking at is the first one, which is not correct at all.  It should be
DELETE FROM [SaleDetails] WHERE [SaleRef] = @SaleRef

Open in new window

0
 
LVL 1

Author Closing Comment

by:kirkheaton25
ID: 31469108
Many Thanks for your help. I was too busy looking at the paramters and got caught out with a schoolboy sql mistake!
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In .NET 2.0, Microsoft introduced the Web Site.  This was the default way to create a web Project in Visual Studio 2005.  In Visual Studio 2008, the Web Application has been restored as the default web Project in Visual Studio/.NET 3.x The Web Si…
ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question