2012-12-22 17 views
1

我有一个GridView中,我有复选框的项目模板,并在复选框改变我更新GridView控件。这里是我的GridView代码:int数据类型是不工作的参数

<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 [email protected] set CLR_FLG=1, CLR_DTE=sysdate where bpv_num=:bpv_num and bpv_dte=:bpv_dte"; 
     } 
     else { 
      cmd.CommandText = @"update [email protected] 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(); 

    } 

的问题是,当我改变复选框出现此错误:

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

任何人都可以告诉可能是什么问题,我该如何解决它?

+0

'数据类型=“System.Int64”'这是我又路过作为参数 – user1915635

回答

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 [email protected] set CLR_FLG=1, CLR_DTE=sysdate where [email protected]_num and [email protected]_dte"; 
       } 
       else 
       { 
        cmd.CommandText = @"update [email protected] set CLR_FLG=0, CLR_DTE=sysdate where [email protected]_num and [email protected]_dte"; 
       } 
       cmd.Parameters.Add(new OleDbParameter("@bpv_num", bpvnum)); 
       cmd.Parameters.Add(new OleDbParameter("@bpv_dte", Convert.ToDateTime(RadComboBox1.SelectedValue))); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
+0

我使用Oracle不是SQL Server和什么是错我的旧代码和你的代码仍然显示同样的错误 – user1915635

+0

你可以查阅一下值由“row.Cells [1]。文本”和“RadComboBox1.SelectedValue”回来了? –

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

+0

不过同样的错误 – user1915635

+0

请与编辑回复 – accfews

+0

我不明白你的那种柱式回复 – user1915635

0

使用快速窗口检查什么是“row.Cells [1]。文本”的vaule回报。

0

在你的代码的问题,是因为从“字符串”错误的类型转换为“OleDbType.Date”的。所以,用下面的代码

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

还要确保正确地转换所有类型OleDbType是否有用于插入更多的行替换下面的代码

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

相关问题