GridView1点删除 数据删除了 但是提示 必须声明标量变量 "@id"。 在线等谢谢各位高手了..

爱吃韭菜的袁某某 2012-04-10 01:35:26
public partial class delpage : System.Web.UI.Page
{
SqlConnection sqlcon;
string strCon = ConfigurationManager.ConnectionStrings["glDBConnectionString3"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
this.GridView1.DataKeyNames = new string[] { "bpid" };
}
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int infoID = (int)GridView1.DataKeys[e.RowIndex].Value;
SqlParameter pares = new SqlParameter("@id", SqlDbType.Int, 4);
string Strsql = "delete from bp where bpid=@id";
sqlcon = new SqlConnection(strCon);
if (sqlcon.State.Equals(ConnectionState.Closed))
{ sqlcon.Open(); }
SqlCommand cmd = new SqlCommand(Strsql, sqlcon);
cmd.Parameters.Add(pares);
SqlDataSource1.DeleteCommand = Strsql;
cmd.Parameters["@id"].Value = infoID;
if (cmd.ExecuteNonQuery() > 0)
{
Response.Write("<script>alert('删除成功!')</script>");
} sqlcon.Close(); }
————————————————————————————————————错误提示

必须声明标量变量 "@id"。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 必须声明标量变量 "@id"。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[SqlException (0x80131904): 必须声明标量变量 "@id"。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1951450
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4849003
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2394
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +204
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +175
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation) +386
System.Web.UI.WebControls.SqlDataSourceView.ExecuteDelete(IDictionary keys, IDictionary oldValues) +303
System.Web.UI.DataSourceView.Delete(IDictionary keys, IDictionary oldValues, DataSourceViewOperationCallback callback) +89
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +714
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +869
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +207
System.Web.UI.WebControls.GridView.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


...全文
325 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-04-10
  • 打赏
  • 举报
回复
你的做法是错误的,如果你使用SqlDataSource1数据源。你应该写

<asp:SqlDataSource id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="略"
SelectCommand="SELECT * FROM bp"
DeleteCommand="delete from bp where bpid=@bpid">
<DeleteParameters>
<asp:Parameter Name="bpid" />
</DeleteParameters>

</asp:SqlDataSource>

<asp:GridView
id="GridView1"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="bpid"
AutoGenerateDeleteButton="True"
AllowPaging="True"
PageSize="20"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField HeaderText="xxxxx" DataField="bpid" />

</Columns>
</asp:GridView>
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
他写错了cmd.Parameters.Add是这样AddWithValue("@id",infoID);


cmd.Parameters.AddWithValue("@id",infoID);
这样才是对的 他那个单词写错了
[/Quote]改完了又出这个错误了 郁闷..除非指定了 DeleteCommand,否则数据源“SqlDataSource1”不支持删除操作。 数据都删除了.
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int infoID = (int)GridView1.DataKeys[e.RowIndex].Value;
string Strsql = "delete from bp where bpid=@id";
sq……
[/Quote]你这个还是说声明变量.
  • 打赏
  • 举报
回复
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int infoID = (int)GridView1.DataKeys[e.RowIndex].Value;
string Strsql = "delete from bp where bpid=@id";
sqlcon = new SqlConnection(strCon);
if (sqlcon.State.Equals(ConnectionState.Closed))
{ sqlcon.Open(); }
SqlCommand cmd = new SqlCommand(Strsql, sqlcon);
cmd.Parameters.Add("@id", SqlDbType.Int, 4,"bpid");
SqlDataSource1.DeleteCommand = Strsql;
cmd.Parameters["@id"].Value = infoID;
if (cmd.ExecuteNonQuery() > 0)
{
Response.Write("<script>alert('删除成功!')</script>");
} sqlcon.Close();
}
  • 打赏
  • 举报
回复
各位大大...小弟在线等
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
string Strsql = "delete from bp where bpid=@id";
sqlcon = new SqlConnection(strCon);
if (sqlcon.State.Equals(ConnectionState.Closed))
{ sqlcon.Open(); }
SqlCommand cmd = new SqlCommand(Strs……
[/Quote]改完了又出这个错误了 郁闷..除非指定了 DeleteCommand,否则数据源“SqlDataSource1”不支持删除操作。
兔子丶哥 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
他写错了cmd.Parameters.Add是这样AddWithValue("@id",infoID);
[/Quote]

cmd.Parameters.AddWithValue("@id",infoID);
这样才是对的 他那个单词写错了
兔子丶哥 2012-04-10
  • 打赏
  • 举报
回复
他写错了cmd.Parameters.Add是这样AddWithValue("@id",infoID);
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

string Strsql = "delete from bp where bpid=@id";
sqlcon = new SqlConnection(strCon);
if (sqlcon.State.Equals(ConnectionState.Closed))
{ sqlcon.Open(); }
SqlCommand cmd = new SqlCommand(Str……
[/Quote]不对呀 Patameters的说什么缺少引用 我是菜鸟 纯自学..
IssacChow 2012-04-10
  • 打赏
  • 举报
回复
试着把sql语句放到赋值语句之前吧
孟子E章 2012-04-10
  • 打赏
  • 举报
回复
string Strsql = "delete from bp where bpid=@id";
sqlcon = new SqlConnection(strCon);
if (sqlcon.State.Equals(ConnectionState.Closed))
{ sqlcon.Open(); }
SqlCommand cmd = new SqlCommand(Strsql, sqlcon);
cmd.Patameters.AddWithValue("@id",infoID);
if (cmd.ExecuteNonQuery() > 0)
{
Response.Write("<script>alert('删除成功!')</script>");
} sqlcon.Close(); }

62,268

社区成员

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

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

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

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