2017-06-02 34 views
1

添加數據網格視圖行SQL表我想數據網格視圖行添加到SQL表,但this error正顯示出雖然真實的數據保存:在vb.net

參數化查詢「(@名1爲nvarchar(4000),@爸爸 爲nvarchar(4000),@性別爲nvarchar(4000' 需要參數 '@名1', 但未提供。

我也研究了很多,有人說加的DBNull價值並沒有發生任何事情,我也讀過MSN文檔但不能理解。

cmd.CommandText = "Insert into Member values('" & txt_fserial_no.Text & "',@Name1,@DOB,@Gender,@Dad,@Relation,@NRC,@Citizen,@Job,@Race,@Country,@Religion)" 
cmd.CommandType = CommandType.Text 
' Dim adapFam As New SqlDataAdapter' 
cmd.Parameters.Add("@Name1", SqlDbType.VarChar) 
cmd.Parameters.Add("@Dad", SqlDbType.VarChar) 
cmd.Parameters.Add("@Gender", SqlDbType.VarChar) 
cmd.Parameters.Add("@DOB", SqlDbType.Date) 
cmd.Parameters.Add("@Job", SqlDbType.VarChar) 
cmd.Parameters.Add("@Race", SqlDbType.VarChar) 

cmd.Parameters.Add("@Country", SqlDbType.VarChar) 
cmd.Parameters.Add("@Religion", SqlDbType.VarChar) 
cmd.Parameters.Add("@Relation", SqlDbType.VarChar) 
cmd.Parameters.Add("@Citizen", SqlDbType.VarChar) 
cmd.Parameters.Add("@NRC", SqlDbType.VarChar) 

For i As Integer = 0 To datagrid_preview.Rows.Count - 1 
    cmd.Parameters.Clear() 
    cmd.Parameters.AddWithValue("@Name1", datagrid_preview.Rows(i).Cells(0).Value) 
    cmd.Parameters.AddWithValue("@Dad", datagrid_preview.Rows(i).Cells(1).Value) 
    cmd.Parameters.AddWithValue("@Gender", datagrid_preview.Rows(i).Cells(2).Value) 
    cmd.Parameters.AddWithValue("@DOB", datagrid_preview.Rows(i).Cells(3).Value) 
    cmd.Parameters.AddWithValue("@Job", datagrid_preview.Rows(i).Cells(4).Value) 
    cmd.Parameters.AddWithValue("@Race", datagrid_preview.Rows(i).Cells(5).Value) 
    cmd.Parameters.AddWithValue("@Country", datagrid_preview.Rows(i).Cells(6).Value) 
    cmd.Parameters.AddWithValue("@Religion", datagrid_preview.Rows(i).Cells(7).Value) 
    cmd.Parameters.AddWithValue("@Relation", datagrid_preview.Rows(i).Cells(8).Value) 
    cmd.Parameters.AddWithValue("@Citizen", datagrid_preview.Rows(i).Cells(9).Value) 
    cmd.Parameters.AddWithValue("@NRC", datagrid_preview.Rows(i).Cells(10).Value) 

    cmd.Connection = conn 
    cmd.ExecuteNonQuery() 

    'adapFam.InsertCommand.ExecuteNonQuery()' 

Next 
conn.Close()`][1] 

回答

1

我認爲這應該工作:

cmd.CommandText = "Insert into Member(id,Name1,Dad,Gender,DOB,Job,Race,Country,Religion,Relation,Citizen,NRC) values(@id,@Name1,@DOB,@Gender,@Dad,@Relation,@NRC,@Citizen,@Job,@Race,@Country,@Religion)" 
cmd.CommandType = CommandType.Text 
cmd.Connection = conn 

For i As Integer = 0 To datagrid_preview.Rows.Count - 1 
    cmd.Parameters.Clear() 
    cmd.Parameters.AddWithValue("@id", txt_fserial_no.Text) 
    cmd.Parameters.AddWithValue("@Name1", datagrid_preview.Rows(i).Cells(0).Value) 
    cmd.Parameters.AddWithValue("@Dad", datagrid_preview.Rows(i).Cells(1).Value) 
    cmd.Parameters.AddWithValue("@Gender", datagrid_preview.Rows(i).Cells(2).Value) 
    cmd.Parameters.AddWithValue("@DOB", datagrid_preview.Rows(i).Cells(3).Value) 
    cmd.Parameters.AddWithValue("@Job", datagrid_preview.Rows(i).Cells(4).Value) 
    cmd.Parameters.AddWithValue("@Race", datagrid_preview.Rows(i).Cells(5).Value) 
    cmd.Parameters.AddWithValue("@Country", datagrid_preview.Rows(i).Cells(6).Value) 
    cmd.Parameters.AddWithValue("@Religion", datagrid_preview.Rows(i).Cells(7).Value) 
    cmd.Parameters.AddWithValue("@Relation", datagrid_preview.Rows(i).Cells(8).Value) 
    cmd.Parameters.AddWithValue("@Citizen", datagrid_preview.Rows(i).Cells(9).Value) 
    cmd.Parameters.AddWithValue("@NRC", datagrid_preview.Rows(i).Cells(10).Value) 

    cmd.ExecuteNonQuery() 

Next 
+0

即使我參數化的ID,同樣的錯誤仍然發生。 –

+0

我有問題,上面的鏈接(「此錯誤」)是由於某種原因不能打開。也許我們公司的代理阻止它。我只能想象,你的主鍵有問題。在我的機器上,我發佈的代碼運行良好。使用MySQL 5.1。 – muffi

+0

感謝您的努力,@ muffi,但我認爲這不是關於PK,因爲我給了MemberID自動遞增,AddressID是一個外鍵。 –

0

定義數據表作爲全球是使用了插入你的GridView原料到SQL Server表和相同的是用戶綁定你的GridView。

直接將dt傳遞給您的SQL Server存儲過程。

創建SQL Server中的功能:

CREATE PROCEDURE [dbo].[Insert_xyz] 
     @tblxyz xyzType READONLY 
AS 
BEGIN 
     SET NOCOUNT ON; 

     INSERT INTO xyz(Id, Name, Country) 
      SELECT Id, Name, Country 
      FROM @tblxyz 
END 

這是VB代碼:

If dt.Rows.Count > 0 Then 
     Dim cons As String = ConfigurationManager.ConnectionStrings("xyz").ConnectionString 
     Using con As New SqlConnection(cons) 
      Using cmd As New SqlCommand("Insert_xyz") 
       cmd.CommandType = CommandType.StoredProcedure 
       cmd.Connection = con 
       cmd.Parameters.AddWithValue("@tblxyz", dt) 
       con.Open() 
       cmd.ExecuteNonQuery() 
       con.Close() 
      End Using 
     End Using 
    End If 

對不起,我的英語不好:)我盡力解釋你。 :)

+0

感謝您的回答。但是我不熟悉「在Sql中使用函數,並且我沒有綁定我的數據gridview,我從字符串數組中添加了。」 –

+0

數據保存到數據庫中,但是仍然彈出錯誤消息,我應該使用其他方式嗎? –

+0

如果你正在使用字符串數組,那麼檢查字符串數組是否具有所有必需的數據?是否缺少任何參數值?某些地方缺少值 – PTank