【问题标题】:Getting Exception in GridView在 GridView 中获取异常
【发布时间】:2014-10-10 07:01:37
【问题描述】:

我使用了 GridView 控件,并在 update(LinkBut​​ton) 上执行代码。 我使用过 ObjectDataSource。 我是初学者。所以请解释一下。

出现错误- 现在收到此错误-参数化查询'(@pname varchar(7),@pgender varchar(8000),@pcity varchar(8),@pid'需要参数'@pgender',但未提供。-

这是后面的代码-

 public static int UpdateEmployee(int id, string name, string gender, string city)
{
    string connection = "Data Source=SRM-318;Initial Catalog=employee;User ID=sa;Password=****";

    SqlConnection scon = new SqlConnection(connection);

      string updateQuery = "update emp SET name=@pname, gender=@pgender, city=@pcity WHERE id=@pid";
    SqlCommand scmd = new SqlCommand(updateQuery, scon);

    scmd.CommandType = CommandType.Text;

    scmd.Parameters.Add("@pname", SqlDbType.VarChar).Value = name;
    scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = gender;
    scmd.Parameters.Add("@pcity", SqlDbType.VarChar).Value = city;
    scmd.Parameters.Add("@pid", SqlDbType.Int).Value = id;

     scon.Open();
    return scmd.ExecuteNonQuery();
}

.................................................. ……………………………………………………………………………………………………………………………………………… 查看设计页面代码-

<body>
<form id="form1" runat="server">
<div>
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
        BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px"
        CellPadding="3" DataKeyNames="id" DataSourceID="ObjectDataSource1" ShowFooter="True"
        GridLines="Vertical" >
        <RowStyle BackColor="#EEEEEE" ForeColor="#8C4510" />
        <Columns>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
                        Text="Edit"></asp:LinkButton>
                    &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"
                        Text="Delete"></asp:LinkButton>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
                        Text="Update"></asp:LinkButton>
                    &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
                        Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="id" SortExpression="id">
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:LinkButton ID="lb" OnClick="lb_Click" ValidationGroup="INSERT" runat="server">Insert</asp:LinkButton>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="name" SortExpression="name">
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("name") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvEditName" ControlToValidate="TextBox1" runat="server"
                        Text="*" ErrorMessage="Name is Required" ForeColor="Red"></asp:RequiredFieldValidator>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="tbname" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvInsertName" ValidationGroup="INSERT" ControlToValidate="tbname"
                        runat="server" Text="*" ErrorMessage="Name is Required" ForeColor="Red"></asp:RequiredFieldValidator>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="gender" SortExpression="gender">
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("gender") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server">
                        <asp:ListItem>Select Gender</asp:ListItem>
                        <asp:ListItem>Male</asp:ListItem>
                        <asp:ListItem>Female</asp:ListItem>
                    </asp:DropDownList>
                    <asp:RequiredFieldValidator ID="rfvEditGender" ControlToValidate="DropDownList1"
                        runat="server" Text="*" ErrorMessage="Gender is Required" ForeColor="Red" InitialValue="Select Gender"></asp:RequiredFieldValidator>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList ID="DropDownList2" runat="server">
                        <asp:ListItem>Select Gender</asp:ListItem>
                        <asp:ListItem>Male</asp:ListItem>
                        <asp:ListItem>Female</asp:ListItem>
                    </asp:DropDownList>
                    <asp:RequiredFieldValidator ID="rfvInsertGender" ValidationGroup="INSERT" ControlToValidate="DropDownList2"
                        runat="server" Text="*" ErrorMessage="Gender is Required" ForeColor="Red" InitialValue="Select Gender"></asp:RequiredFieldValidator>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="city" SortExpression="city">
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("city") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("city") %>'></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvEditCity" ControlToValidate="TextBox3" runat="server"
                        Text="*" ErrorMessage="City is Required" ForeColor="Red"></asp:RequiredFieldValidator>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="tbcity" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="rfvInsertCity" ValidationGroup="INSERT" ControlToValidate="tbcity"
                        runat="server" Text="*" ErrorMessage="City is Required" ForeColor="Red"></asp:RequiredFieldValidator>
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#CCCCCC" ForeColor="#8C4510" />
        <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" BackColor="#999999" />
        <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="#DCDCDC" />
    </asp:GridView>
    <asp:ValidationSummary ValidationGroup="INSERT" ID="ValidationSummary1" ForeColor="Red"
        runat="server" />
    <asp:ValidationSummary ID="ForGridViewValidations" runat="server" />
    <br />
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        InsertMethod="InsertEmployee" SelectMethod="GetAllEmployee" TypeName="EmployeeDataAccessLayer"
        UpdateMethod="UpdateEmployee" DeleteMethod="DeleteEmployee">
        <DeleteParameters>
            <asp:Parameter Name="id" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="gender" Type="String" />
            <asp:Parameter Name="city" Type="String" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="gender" Type="String" />
            <asp:Parameter Name="city" Type="String" />
        </InsertParameters>
    </asp:ObjectDataSource>
</div>
</form>

【问题讨论】:

  • 您正在使用SqlCommand 中的参数。但是您在哪里将参数从 c# 变量传递到命令中?见:msdn.microsoft.com/pl-pl/library/…
  • 来自 Gridview TextBoxes 我已经通过了。

标签: c# sql asp.net .net sql-server


【解决方案1】:

您应该添加 sqlCommand 参数。

ccmd.Parameters.AddWithValue("@name", value of name);
ccmd.Parameters.AddWithValue("@city", value of city);
ccmd.Parameters.AddWithValue("@gender", value of gender);
ccmd.Parameters.AddWithValue("@id", value of id);

【讨论】:

【解决方案2】:

您没有将参数namegendercityid 传递给您的命令。

应该是这样的

scmd.Parameters.Add["@name", SqlDbType.VarChar];
scmd.Parameters["@name"].Value = name;

等等

【讨论】:

  • @user2096592 你已经编辑了你的代码,但是你写的代码甚至不会编译,因为你在添加它时没有在@name和其他参数名称周围加上引号。跨度>
  • 我已编辑。现在出现此错误 现在出现此错误 - 参数化查询 '(@pname varchar(7),@pgender varchar(8000),@pcity varchar(8),@pid' 需要参数 '@pgender',但未提供.-
  • @user2096592 也许你在gender 变量中传递了null。你可以这样处理他的案子:scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = gender ?? DBNull.Value;
  • 参见设计页面代码。我已经执行了验证。所以值不能为空
  • 插入、删除按钮工作正常。但是更新会产生问题。
【解决方案3】:

应该是这样的:

public static int UpdateEmployee(int id, string name, string gender, string city)
{
    string connection = "Data Source=SRM-318;Initial Catalog=employee;User ID=sa;Password=****";

    SqlConnection scon = new SqlConnection(connection);

    string updateQuery = "update emp SET name=@pname, gender=@pgender, city=@pcity WHERE id=@pid";
    SqlCommand scmd = new SqlCommand(updateQuery, scon);

    scmd.CommandType = CommandType.Text;

    scmd.Parameters.Add("@pname", SqlDbType.VarChar).Value = name;

    // Edit Starts
    if (!String.IsNullOrEmpty(gender))
    {
        scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = gender;
    }
    else
    {
        scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = DBNull.Value;
    }
    // Edit Ends

    scmd.Parameters.Add("@pcity", SqlDbType.VarChar).Value = city;
    scmd.Parameters.Add("@pid", SqlDbType.Int).Value = id;

    scon.Open();
    return scmd.ExecuteNonQuery();
}

【讨论】:

  • 我使用了你的代码。现在出现此错误 - 参数化查询 '(@pname varchar(7),@pgender varchar(8000),@pcity varchar(8),@pid' 需要参数 '@pgender',但未提供。
  • @user2096592 哎呀。它应该是 if (!String.IsNullOrEmpty(gender)) 而不是 if (String.IsNullOrEmpty(gender))。我已经编辑过了。试着告诉我。
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多