2012-03-20 8 views
0

私はユーザーがデータを入力できる小さなDataGridViewを持っています。DataGridViewからデータベースにデータを挿入する

Ths is the grid

そして私は、データベースへのDataGridViewにデータを入力するには、このコードをしようとしています。

strQry = "INSERT INTO Emp_Fam_Details (empID, famName, famAge, famRelation, famOccup)" _ 
      & "VALUES (@ID, @Name, @Age, @Rel, @Occ)" 
    Dim adapFam As New SqlDataAdapter 
    adapFam.InsertCommand = New SqlCommand(strQry, sqlcon) 

    For i As Integer = 0 To grdFamily.Rows.Count - 1 
     adapFam.InsertCommand.Parameters.AddWithValue("@ID", txtEmpID.Text.Trim) 
     adapFam.InsertCommand.Parameters.AddWithValue("@Name", grdFamily.Columns(0)) 
     adapFam.InsertCommand.Parameters.AddWithValue("@Age", grdFamily.Columns(1)) 
     adapFam.InsertCommand.Parameters.AddWithValue("@Rel", grdFamily.Columns(2)) 
     adapFam.InsertCommand.Parameters.AddWithValue("@Occ", grdFamily.Columns(3)) 

     result2 = adapFam.InsertCommand.ExecuteNonQuery() 
    Next 

これを実行すると、このエラーが発生します。

This is the error

私はSOにここthis解決策を見つけましたが、私は値を付加していないパラメータを使用していているので、私はパラメータでそれを行う方法を理解することに苦労しています。

誰でもこの方法を教えてください。

ありがとうございます。

答えて

1

データにの列をマップすることはできません。

NOTEを次のようにあなたが追加する必要があると、その列のインデックス

の行のセルのデータがこのループの中の間違ったgrdFamily.Columns(0)

パラメータ割り付けは、あなたに従ってデータ型を変更してください修正する必要がありますされています表。

adapFam.InsertCommand.Parameters.Add("@ID", SqlDbType.Int) 
adapFam.InsertCommand.Parameters.Add("@Name", SqlDbType.VarChar) 
adapFam.InsertCommand.Parameters.Add("@Age", SqlDbType.VarChar) 
adapFam.InsertCommand.Parameters.Add("@Rel", SqlDbType.VarChar) 
adapFam.InsertCommand.Parameters.Add("@Occ", SqlDbType.VarChar) 

For i As Integer = 0 To grdFamily.Rows.Count - 1 
    adapFam.InsertCommand.Parameters[0].Value = Convert.ToInt32(txtEmpID.Text.Trim) 
    adapFam.InsertCommand.Parameters[1].Value = grdFamily.Rows[i].Cells[0].Value 
    adapFam.InsertCommand.Parameters[2].Value = grdFamily.Rows[i].Cells[1].Value 
    adapFam.InsertCommand.Parameters[3].Value = grdFamily.Rows[i].Cells[2].Value 
    adapFam.InsertCommand.Parameters[4].Value = grdFamily.Rows[i].Cells[3].Value 

    result2 = adapFam.InsertCommand.ExecuteNonQuery() 
Next 
+0

これは素晴らしいです。どうもありがとうございます。私はここで少し問題に直面していますが。私がそれを実行すると、最初の行は正常に挿入されますが、2番目の行を挿入すると、[this](http://i41.tinypic.com/5zgriu.png)エラーがスローされます。パラメータなどを_refresh_する方法がありますか? – Isuru

+0

さて、ループの中にパラメータを追加しています。つまり、すべてのiに対してパラメータを追加しています。ループの前にパラメータを追加し、ループ内に値を割り当ててください。それはうまくいくはずです... – Kaf

+0

'ExecuteNonQuery'の後に' adapFam.InsertCommand.Parameters.Clear() 'を使用しました。今はうまくいく。ご協力ありがとうございました。 – Isuru

関連する問題