c#无法从字符串转换为int

时间:2016-10-07 18:21:15

标签: c# asp.net

我有一个从SQL表填充的gridview,它显示两列,一列来自整数数据列,另一列来自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" />

希望这回答(一些?)迄今为止所有评论的问题。

1 个答案:

答案 0 :(得分:2)

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

row.Cells[3].Text

最好像这样使用sql的参数:

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