Ich habe Probleme mit meinem gespeicherten Prozedur-Aufruf hier. Ich versuche, alle meine Informationen von einer gespeicherten Prozedur zu erhalten, die eine einzelne Spalte in eine Datentabelle zurückgibt. Ich bin hier für die meisten Lösungen gefolgt und kann nicht herausfinden, warum es nicht funktioniert. Meine Datentabelle hat eine Primärschlüsseleinschränkung, da mehrere Werte darin enthalten sind. Aber von dem, was ich gelesen habe, ist dies nicht notwendig, da die Fill
auf der SqlDataAdapter
nur diese Änderungen zusammenführen wird, wenn es eine gibt?Daten von gespeicherter Prozedur abrufen
Hier ist mein Code so weit:
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
jedoch der Fehler, die ich erhalte, ist:
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Meine gespeicherten Prozedur Ich rufe eine einfache
Select ID
From TableName
Where Reference = @Reference
ist
ohne wirklich Bedingungen, und ich habe getestet und es gibt etwa 19 einzigartige Aufzeichnungen.
Jede Hilfe wäre willkommen, danke!
Welche Linie werden Sie den Fehler immer auf? – Fabulous
Nun, Sie haben eine Spalte namens ReferenceID erstellt. Sie haben dann angegeben, dass es der Primärschlüssel Ihrer Datentabelle ist, aber Sie haben keine Werte dafür angegeben. Wenn Sie eine gespeicherte Prozedur verwenden, um Ihre Datentabelle aufzufüllen, entfernen Sie einfach alle unnötigen Spaltendefinitionen. Erstellen Sie einfach eine neue DataTable und rufen Sie dann Ihre Fill-Methode auf. –
@Fabulous der Fehler Ich bekomme diese Zeile auf (und die Ausnahme abfangen) ist auf der sqlAdp.Fill. Und @Sean Ich verstehe, dass es als Primärschlüssel festgelegt ist, aber es bedeutet nicht, dass ich keinen Primärschlüssel als die Werte auffüllen kann, nein? Wenn Sie jedoch den Fill-Befehl in MSDN lesen, scheint das 'Fill' nur das erste Ergebnis zu erhalten. – Phlex