【问题标题】:int data type is not working as parameterint 数据类型不能用作参数
【发布时间】:2012-12-22 11:04:04
【问题描述】:

我有一个 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(); 

    }

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

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

谁能告诉我可能是什么问题以及我该如何解决?

【问题讨论】:

  • DataType="System.Int64" 这是我作为参数传递的列类型

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


【解决方案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();
            }
        }
    }

【讨论】:

  • 我使用的是 Oracle 而不是 Sql Server,我的旧代码有什么问题,您的代码仍然显示相同的错误
  • 你能检查“row.Cells[1].Text”和“RadComboBox1.SelectedValue”返回什么值吗?
【解决方案2】:

也许你应该使用

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 而不是组合框

【讨论】:

  • 我不明白你的好意的回复
  • 再次添加更多信息检查
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    代码中的问题是因为从“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。

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多