没有给出一个或多个必需参数的值。在asp.NET中

时间:2015-06-15 15:59:06

标签: c# asp.net

我正在尝试在检查行时从网格视图中获取列值,并将这些值插入到其他表中,              当选中网格视图中的复选框时,这是我的c#代码

    protected void chkfun_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox chkstatus = (CheckBox)sender;
            GridViewRow row = (GridViewRow)chkstatus.NamingContainer;
        }
     protected void hidebutton_Click(object sender, EventArgs e)
        {
            OleDbConnection acc = dc_object.a_object.Connect("CARLI_funds_FY16");
            OleDbCommand commd = new OleDbCommand();
            commd.Connection = acc;
            CheckBox x1;
            HiddenField x2;
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                x1 = GridView1.Rows[i].FindControl("chkfun") as CheckBox;
                if (x1.Checked)
                {
                    x2 = GridView1.Rows[i].FindControl("hdnfld") as HiddenField;
                    var fund_code = (GridView1.Rows[i].FindControl("lblfundcode") as Label).Text;
                    var fund_name = (GridView1.Rows[i].FindControl("lblfundname") as Label).Text;

                    commd.CommandText = "insert into funds_hidden values(fund_code,fund_name)";
                commd.ExecuteNonQuery();
                }

            }
            acc.Close();
            Response.Redirect("allfunds.aspx");
        }

,这是我的aspx代码

 <asp:GridView ID="GridView1" runat="server" DataKeyNames="ID,FUND_CODE,FUND_NAME" AllowSorting="True" CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            <asp:CheckBox ID="chkheader" runat="server" OnCheckedChanged="chkheader_CheckedChanged" AutoPostBack="True" />
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="chkfun" runat="server" OnCheckedChanged="chkfun_CheckedChanged" AutoPostBack="True" />
                            <asp:HiddenField ID="hdnfld" runat="server" value='<%# Eval("ID") %>'/>
                        </ItemTemplate>
                    </asp:TemplateField>
                           <asp:TemplateField HeaderText="FUND_CODE">
                        <ItemTemplate>
                        <asp:Label ID="lblfundcode" runat="server" Text='<%# Eval("FUND_CODE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                     <asp:TemplateField HeaderText="FUND_NAME">
                        <ItemTemplate>`enter code here`
                        <asp:Label ID="lblfundname" runat="server" Text='<%# Eval("FUND_NAME") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                </asp:GridView>
                <asp:LinkButton ID="hidebutton" runat="server" OnClick="hidebutton_Click" Text="hide" />
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" SortParameterName="" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT ID,NORMAL_FUND_NAME AS FUND_NAME, NORMAL_FUND_CODE AS FUND_CODE FROM funds_sample1 WHERE (LEDGER_ID = 43) AND (PARENT_FUND = 1124 OR PARENT_FUND = 984 OR PARENT_FUND = 370 OR PARENT_FUND = 363)"></asp:SqlDataSource>
        </form>

我只是初学者请指导我,如果我的代码有任何错误,我该怎么做才能清除此错误,提前谢谢

2 个答案:

答案 0 :(得分:1)

您应该为您的值指定参数:

commd.CommandText = "insert into funds_hidden values(?, ?)";
commd.Parameters.Add("code", OleDbType.VarChar).Value = fund_code;
commd.Parameters.Add("name", OleDbType.VarChar).Value = fund_name;

我还建议:

  • 了解C#命名约定(使用camelCase而不是underscore_separators)
  • 对数据库资源(例如命令和连接)使用using语句
  • 在SQL语句中指定要更新的字段名称

答案 1 :(得分:0)

我已将insert语句更改为以下方式以使其正常工作,感谢您现在正在帮助其工作

for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            x1 = GridView1.Rows[i].FindControl("chkfun") as CheckBox;
            if (x1.Checked)
            {
                x2 = GridView1.Rows[i].FindControl("hdnfld") as HiddenField;
                var fund_code = (GridView1.Rows[i].FindControl("lblfundcode") as Label).Text;
                var fund_name = (GridView1.Rows[i].FindControl("lblfundname") as Label).Text;

                string insertstatement = "insert into funds_hidden(fund_code,fund_name)"+ " values (?,?)" ;

                OleDbCommand insertcommand = new OleDbCommand(insertstatement, acc);
                insertcommand.Parameters.Add("fund_code", OleDbType.Char).Value = fund_code;
                insertcommand.Parameters.Add("fund_name", OleDbType.Char).Value = fund_name;
insertcommand.ExecuteNonQuery();