使用SqlDataSource控件删除记录出错一例

使用SqlDataSource控件删除记录出错,提示:

您已指定 删除 命令比较 SqlDataSource“SqlDataSource1”的所有值,但为 values 传入的字典是空的。请为 删除 传入有效的字典或将模式更改为 OverwriteChanges。

解决方法:在配置数据源时,在高级 SQL 生成选项中,不钩选"使用开放式并发"。



Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 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">
    <title>SqlDataSource1测试-Mzwu.Com</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
        
        
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="Data Source=127.0.0.1;Initial Catalog=test;User ID=sa;Password=sa"
            DeleteCommand="Delete FROM [student] Where [id] = @original_id"
            InsertCommand="Insert INTO [student] ([name], [age]) VALUES (@name, @age)"
            OldValuesParameterFormatString="original_{0}"
            ProviderName="System.Data.SqlClient"
            SelectCommand="Select [id], [name], [age] FROM [student]"
            UpdateCommand="Update [student] SET [name] = @name, [age] = @age Where [id] = @original_id">
            <DeleteParameters>
                <asp:Parameter Name="original_id" Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="name" Type="String" />
                <asp:Parameter Name="age" Type="Int32" />
                <asp:Parameter Name="original_id" Type="Int32" />
            </UpdateParameters>
            <InsertParameters>
                <asp:Parameter Name="name" Type="String" />
                <asp:Parameter Name="age" Type="Int32" />
            </InsertParameters>
        </asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            DataKeyNames="id" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
                    ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
                <asp:BoundField DataField="age" HeaderText="age" SortExpression="age" />
            </Columns>
        </asp:GridView>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click"
            style="height: 26px" Text="Button" />
    
    </div>
    </form>
</body>
</html>

Default.aspx.cs:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {}

    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlDataSource1.DeleteParameters["original_id"].DefaultValue = "1";
        SqlDataSource1.Delete();
    }
}


评论: 0 | 引用: 0 | 查看次数: 6444
发表评论
登录后再发表评论!