2013-07-05 25 views
0

我需要將DataGridView列和2 DataTable列插入到SQL中。下面的代碼按順序插入了DataGridView列,這是我想要的,但DataTable列只插入第一行並將其複製到所有行上。任何想法如何解決這個問題?將datatable和datagridview數據插入到sql中

_Command = New SqlCommand("insert_student", _Connection) 
_Command.CommandType = CommandType.StoredProcedure 
_Connection.Open() 
_Command.Parameters.Add(New SqlParameter("@_name", SqlDbType.NVarChar)) 
_Command.Parameters.Add(New SqlParameter("@_m_barrImg", SqlDbType.VarBinary)) 
_Command.Parameters.Add(New SqlParameter("@_CurrentImageName", SqlDbType.NChar)) 
_Command.Parameters.Add(New SqlParameter("@_CurrentImageName1", SqlDbType.NChar)) 

For x = 0 To DataGridView1.RowCount - 1 
    _Command.Parameters("@_name").Value = DataGridView1.Rows(x).Cells("name4").Value 
    _Command.Parameters("@_m_barrImg").Value = DataGridView1.Rows(x).Cells("CompanyStatusImage").Value 

    Dim dt As New DataTable() 
    For i As Integer = 0 To dt.DefaultView.Count - 1 

     _Command.Parameters("@_CurrentImageName").Value = dt.Rows(i)("CurrentImageName").ToString 
     _Command.Parameters("@_CurrentImageName1").Value = dt.Rows(i)("CurrentImageName1").ToString 
    Next 

    _Command.ExecuteNonQuery() 
Next 

存儲過程

USE [master] 
GO 

/****** Object: StoredProcedure [dbo].[insert_student] Script Date: 07/04/2013 21:47:36 ******/ 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

ALTER procedure [dbo].[insert_student] (@_m_barrImg varbinary(max), 
             @_name nvarchar(max) 
as 
    insert into tblimgdata(name4,CompanyStatusImage) 
    values (@_name,@_m_barrImg) 
+0

您正在通過DataGridView的For循環中的'DataTable'循環 - 這意味着您正在獲取的'DataTable'中的唯一值是表中最後一行的值。 'DataGridView'和'DataTable'之間有什麼關係? 1是1嗎? – Tim

+0

是1表示1.感謝 – user1858480

回答

0

假設在DataGridView的行數等於列在DataTable數目(這是1 1將指示),並且它們的順序是相同的,你可以轉儲你的內部循環,並簡單地使用外部循環索引從DataTable的相應行中獲取數據:

For x = 0 To DataGridView1.RowCount - 1 

    _Command.Parameters("@_name").Value = DataGridView1.Rows(x).Cells("name4").Value 
    _Command.Parameters("@_m_barrImg").Value = DataGridView1.Rows(x).Cells("CompanyStatusImage").Value 

    _Command.Parameters("@_CurrentImageName").Value = dt.Rows(x)("CurrentImageName").ToString 
    _Command.Parameters("@_CurrentImageName1").Value = dt.Rows(x)("CurrentImageName1").ToString 

    _Command.ExecuteNonQuery() 
Next 

上述代碼將採用DataGridView中行「x」的名稱4和CompanyStatusImage值以及DataTable中行「x」中的「CurrentImageName」和「CurrentImageName1」值。

+0

是的,它的工作,awesom,非常感謝你。只是一個問題,當插入_ @名稱與存儲過程從dgv,名稱的順序被改變,任何想法爲什麼?我要發佈我的商店程序。 – user1858480

+0

@ user1858480 - 我會在你發佈你的存儲過程後看看。 – Tim

+0

USE [master] GO /******對象:StoredProcedure [dbo]。[insert_student]腳本日期:07/04/2013 21:47:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER過程[DBO]。[insert_student](@_m_barrImg VARBINARY(最大),@ _名稱爲nvarchar(最大) 作爲 插入到tblimgdata(NAME4,CompanyStatusImage)值(@_name, @_m_barrImg) – user1858480