c#不能从字符串转换为整型

本文关键字:整型 转换 字符串 不能 | 更新日期: 2023-09-27 18:12:01

我有一个gridview,它从一个SQL表填充并显示两列,一列来自整数数据列,另一列来自nvarchar。Gridview也有一个复选框列

gridview正确填充,并且在选择行子集(通过复选框列)之后,我想将选中的行插入到另一个SQL表中。当填充SQL语句的变量,然而,我得到的"不能从字符串转换为int"错误的值,从一个int填充开始。

我试着为这个语句写转换和解析,但仍然得到错误:

cmd.Parameters.AddWithValue("@PracticeArea", int.Parse(row.Cells["Id"].Value));
cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value));
cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Text));

仍显示["Id"]值错误

任何想法吗?

填充到gridview的数据示例如下:

PracticeID  PracticeName
1   General Surgical Pathology
2   General Pathology/Basic Science
4   Cardiovascular
6   Cytopathology-GYN
7   Cytopathology-nonGYN

全按钮命令为:

protected void Bulk_Insert(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        if ((row.FindControl("CheckBox1") as CheckBox).Checked)
        {
            string connectionString = WebConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
            SqlConnection con = new SqlConnection(connectionString);
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO ReviewerPractice VALUES(@Reviewer, @PracticeArea)", con))  
                {
                    cmd.Parameters.AddWithValue("@Reviewer", ReviewerName.Text);
                    cmd.Parameters.AddWithValue("@PracticeArea", Convert.ToInt32(row.Cells["Id"].Value));
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
    }
}

完整的Gridview控件是:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" />
    </ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="30" />
<asp:BoundField DataField="PracticeName" HeaderText="PracticeName"  ItemStyle-Width="150" />
</Columns>
</asp:GridView>
<br />
<asp:Button ID="Button1" Text="Add Practice Areas" OnClick="Bulk_Insert" runat="server" />

希望这篇文章能回答到目前为止所有评论中的一些问题。

c#不能从字符串转换为整型

问题是row.Cells[]是一个数组,所以您需要像这样使用它:

row.Cells[3].Text

最好使用如下的sql参数:

cmd.Parameters.Add("@PracticeArea", SqlDbType.Int).Value = Convert.ToInt32(row.Cells[index].Text;