在GridView中修改一条记录点“Update”后报错 “Must declare the scalar variabl”

shi_hang_nk 2009-10-21 06:32:07
我的环境是VS 2008 SP1,数据库是通过ODBC连接SQL Server 2008

Aspx页面的代码如下

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="EmailMarketingWebApplication.WebForm1" %>

<!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">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="id" DataSourceID="SqlDataSource1"
AutoGenerateEditButton="True">
<Columns>
<asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
<asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="id" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString="<%$ ConnectionStrings:ConnectionString2 %>"
ProviderName="<%$ ConnectionStrings:ConnectionString2.ProviderName %>"
SelectCommand="SELECT name, id FROM overseas.dbo.companies"
UpdateCommand="UPDATE overseas.dbo.companies SET name = @name">

<UpdateParameters>
<asp:Parameter Name="id" Type="Object" />
<asp:Parameter Name="name" Type="String" />
</UpdateParameters>

</asp:SqlDataSource>
</form>
</body>
</html>

按下F5执行时可以正在读出记录,但点击Edit,修改一条记录后再点 Update,却报出如下错误


Server Error in '/' Application.
--------------------------------------------------------------------------------

ERROR [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Must declare the scalar variable "@name".
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.Odbc.OdbcException: ERROR [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Must declare the scalar variable "@name".

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[OdbcException (0x80131937): ERROR [42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Must declare the scalar variable "@name".]
System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) +1155538
System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod) +1147
System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader) +61
System.Data.Odbc.OdbcCommand.ExecuteNonQuery() +92
System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation) +386
System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +325
System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +92
System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +907
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +704
System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +123
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

那位高手能指点一下呀。

...全文
236 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shi_hang_nk 2009-10-26
  • 打赏
  • 举报
回复
那位高手能指点一下?
shi_hang_nk 2009-10-22
  • 打赏
  • 举报
回复
谢谢panliuwen和wuyq11 的回复,可是很奇怪我已经定义了 <asp:Parameter Name="name" Type="String"/>

<asp:SqlDataSource ID="SqlDataSource1" runat="server"

ConnectionString=" <%$ ConnectionStrings:ConnectionString2 %>"
ProviderName=" <%$ ConnectionStrings:ConnectionString2.ProviderName %>"
SelectCommand="SELECT name, id FROM overseas.dbo.companies"
UpdateCommand="UPDATE overseas.dbo.companies SET name = @name">

<UpdateParameters>
<asp:Parameter Name="id" Type="Object" />
<asp:Parameter Name="name" Type="String" />
</UpdateParameters>

</asp:SqlDataSource>

也谢谢panliuwen的提醒,UPDATE overseas.dbo.companies SET name = @name 是很危险。这只是测试程序,本来是加了where id=@id 的,但是同@name一样,报@id没定义,所以就去掉了where子句。
wuyq11 2009-10-21
  • 打赏
  • 举报
回复
必须声明变量@name
<UpdateParameters>
<asp:Parameter Name="name" Type="string" />
使用SqlDataSource1.UpdateParameters.Add("@name", ""); 试试
panliuwen 2009-10-21
  • 打赏
  • 举报
回复
@name 没有声明或者定义
panliuwen 2009-10-21
  • 打赏
  • 举报
回复
UPDATE overseas.dbo.companies SET name = @name
这个太危险了,会修改所有的语句的
你前面也没有给它赋值啊

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧