2016-10-07 12 views
-1

SQLテーブルからデータを取り込み、2つの列を表示するグリッドビューがあります.1つは整数データ列から、もう1つはnvarcharから取得します。グリッドビューにはチェックボックス列がありますc#文字列からintに変換できません

グリッドビューは正しく挿入され、行のサブセットが選択された後(チェックボックス列で)、選択した行を別の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

row.Cells[3].Text 

そして、このようなSQLのパラメータを使用することをお勧めしますどの値がrow.Cells ["Id"]の値であるかを確認してください。 –

+0

@GiladGreenの先頭と末尾の空白は、パーサによって処理されます。 – juharr

+1

私はaffraid 'Idはこのエラーをスローする値ではありません。ターゲットデータベーステーブルに他の 'Integer'カラムがありますか? – Fabio

答えて

2

問題は、あなたがこのようにそれを使用する必要があるのでrow.Cells[]は、配列であるということです:あなたは、デバッグでし

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

私はあなたが働くために提供したフォーマットのいずれかを得ることができません。どちらもまだエラーを出しています。変更するだけで、今は "System.ArgumentOutOfRangeException"エラーです。 –

+0

つまり、セルの配列に存在しないセルにアクセスしようとしています。たとえば、GridViewに4列(0,1,2,3)の列があり、5行目の 'row.Cells [4] .Text'にアクセスしようとすると、そのエラーが発生します。 – VDWWD

+0

最後のコメントを取り消し、いくつかの調整を行っています。 –

関連する問題