int数据类型不作为参数

时间:2012-12-22 11:04:04

标签: asp.net oracle c#-4.0 telerik

我有一个GridView,其中我有复选框作为项目模板,我在更改复选框时更新GridView。这是我的GridView代码:

<Columns>
    <telerik:GridTemplateColumn>
    <ItemTemplate>
        <asp:CheckBox ID="chkcelar" runat="server" Text="Clear" OnCheckedChanged="chkclearchng" AutoPostBack="true"/>
    </ItemTemplate>
    </telerik:GridTemplateColumn>
        <telerik:GridBoundColumn DataField="BPV_NUM" DataType="System.Int64"
            DefaultInsertValue="" HeaderText="BPV No" SortExpression="BPV_NUM" 
            UniqueName="BPV_NUM">
        </telerik:GridBoundColumn>
</Columns>

这是我正在更新网格视图的c#代码

protected void chkclearchng(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle");
        OleDbCommand cmd  = new OleDbCommand();
        CheckBox chkcelar = ((CheckBox)(sender));
        GridDataItem  row = ((GridDataItem)(chkcelar.NamingContainer));
        long bpvnum = row.Cells[1].Text;

        if (chkcelar.Checked ) {
            cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=1, CLR_DTE=sysdate where bpv_num=:bpv_num and bpv_dte=:bpv_dte";
        }
        else {
            cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=0, CLR_DTE=sysdate where bpv_num=:bpv_num and bpv_dte=:bpv_dte";
        }
        cmd.CommandType = CommandType.Text;
        cmd.Connection  = con;

        cmd.Parameters.Add(":bpv_num",OleDbType.BigInt).Value = bpvnum;
        cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value   = RadComboBox1.SelectedValue;

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close(); 

    }

问题是当我更改复选框时会出现此错误:

  

输入字符串的格式不正确。

任何人都可以说出可能存在的问题,我该如何解决?

4 个答案:

答案 0 :(得分:1)

可能你应该使用

long bpvnum = long.Parse(row.Cells[1].Text);

如果在此行上不起作用

cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value   = RadComboBox1.SelectedValue

您需要参数类型OleDbType.Date,但是您要分配RadComboBox1.SelectedValue

所以你需要转换你的

RadComboBox1.SelectedValue to OleDbType.Date

或者您应该只使用DateTimePicker 而不是ComboBox

答案 1 :(得分:1)

更改您的代码:

    protected void chkclearchng(object sender, EventArgs e)
    {
        using (OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle"))
        {
            con.Open();
            using (OleDbCommand cmd = new OleDbCommand(null, con))
            {
                CheckBox chkcelar = ((CheckBox)(sender));
                GridDataItem row = ((GridDataItem)(chkcelar.NamingContainer));
                long bpvnum = Convert.ToInt64(row.Cells[1].Text);
                if (chkcelar.Checked)
                {
                    cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=1, CLR_DTE=sysdate where bpv_num=@bpv_num and bpv_dte=@bpv_dte";
                }
                else
                {
                    cmd.CommandText = @"update sml.FND_01_11@wbg set CLR_FLG=0, CLR_DTE=sysdate where bpv_num=@bpv_num and bpv_dte=@bpv_dte";
                }
                cmd.Parameters.Add(new OleDbParameter("@bpv_num", bpvnum));
                cmd.Parameters.Add(new OleDbParameter("@bpv_dte", Convert.ToDateTime(RadComboBox1.SelectedValue)));
                cmd.ExecuteNonQuery();
            }
        }
    }

答案 2 :(得分:0)

使用“快速”窗口检查“row.Cells [1] .Text”的返回值是什么。

答案 3 :(得分:0)

代码中的问题是因为从“string”到“OleDbType.Date”的类型转换错误。所以替换以下代码

cmd.Parameters.Add(":bpv_dte",OleDbType.Date).Value   = RadComboBox1.SelectedValue;

使用以下代码

cmd.Parameters.Add(New OleDb.OleDbParameter("@bpv_dte", OleDb.OleDbType.Date));
cmd.Parameters("@bpv_dte").Value = RadComboBox1.SelectedValue.ToString("d");

如果有更多行用于插入,请确保将所有类型正确转换为OleDbType。