我似乎在我的存儲過程調用遇到麻煩。我試圖從存儲過程中獲取所有信息,這會將單列返回到數據表中。我一直在跟蹤大多數解決方案,似乎無法弄清楚爲什麼它不起作用。我的數據表有一個主鍵約束,因爲它有多個值。但是,從我讀過的內容來看,這是沒有必要的,因爲SqlDataAdapter
上的Fill
只會合併這些更改(如果有)。從存儲過程檢索數據
這是到目前爲止我的代碼:
Dim dtValues As New DataTable()
Dim dtCol As New DataColumn()
dtCol.ColumnName = "ReferenceID"
dtCol.DataType = GetType(SqlInt32)
dtCol.AllowDBNull = False
dtValues.Columns.Add(dtCol)
dtValues.PrimaryKey = {dtCol}
Public Shared Sub ExecStoredProc(ByVal ProcName As String, ByRef connection As SqlConnection, ByRef dtValues As DataTable, ByVal ParamArray args() As Object)
Dim sqlCommand As New SqlCommand()
For i = 0 To args.Length - 1 Step 2
sqlCommand.Parameters.AddWithValue(CStr(args(i)), args(i + 1))
Next
sqlCommand.CommandText = ProcName
sqlCommand.CommandType = CommandType.StoredProcedure
sqlCommand.Connection = connection
Dim sqlAdp As New SqlDataAdapter(sqlCommand)
' Fill the table to mess around with.
sqlAdp.Fill(dtValues)
End Sub
但是,我得到的錯誤是:
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
我的存儲過程,我打電話是一個簡單的
Select ID
From TableName
Where Reference = @Reference
真的沒有條件,我測試過,它返回大約19個獨特的記錄。
任何幫助將不勝感激,謝謝!
哪條線是你得到的錯誤? – Fabulous
那麼你創建了一個名爲ReferenceID的列。然後你說它是你的數據表的主鍵,但你沒有提供它的值。如果您使用存儲過程來填充數據表,則只需刪除所有不必要的列定義。只需創建一個新的DataTable,然後調用你的Fill方法。 –
@Fabulous我得到這一行(並捕捉異常)的錯誤是在sqlAdp.Fill。而@Sean我明白它被設置爲主鍵,但這並不意味着我不能設置主鍵而不是填充值,否?但是,閱讀MSDN上的Fill命令,似乎'Fill'只會獲得第一個結果? – Phlex