의견 제안에 Gord Thompson이 암시 한 내용이 답으로 표시됩니다.
관계의 잘못된 테이블에 ALTER 문이 적용되고있었습니다.
제약 조건은 원래 출석 테이블에 추가되었습니다. 그러나 "GetOleDbSchemaTable"메소드를 사용하여 나열 할 때 Sessions 테이블의 속성으로 표시됩니다. 다음 코드 발췌 당
:
Structure Relation
Public Name As String
Public PrimaryTableName As String
Public PrimaryField As String
Public PrimaryIndex As String
Public ForeignTable As String
Public ForeignField As String
Public OnUpdate As String
Public OnDelete As String
Public Overrides Function ToString() As String
Dim msg As String = String.Format("Name:{0} PT:{1} PF:{2} PI:{3} FT:{4} FF:{5}", _
Name, PrimaryTableName, PrimaryField, PrimaryIndex, ForeignTable, ForeignField)
Return msg
End Function
End Structure
Private Function ListRelations(tableName As String) As List(Of Relation)
Dim relations As New List(Of Relation)
Dim MySchemaTable As DataTable
Dim dbConn As New OleDbConnection(connectionString)
dbConn.Open()
MySchemaTable = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, _
New Object() {Nothing, Nothing, tableName})
Dim result As Boolean = False
'List the table name from each row in the schema table.
For Each row As DataRow In MySchemaTable.Rows
Dim r As New Relation
r.Name = row("FK_NAME")
r.PrimaryTableName = row("PK_TABLE_NAME")
r.PrimaryField = row("PK_COLUMN_NAME")
r.PrimaryIndex = row("PK_NAME")
r.ForeignTable = row("FK_TABLE_NAME")
r.ForeignField = row("FK_COLUMN_NAME")
r.OnUpdate = row("UPDATE_RULE")
r.OnDelete = row("DELETE_RULE")
Console.WriteLine(r.ToString)
relations.Add(r)
Next
MySchemaTable.Dispose()
dbConn.Close()
dbConn.Dispose()
Return relations
End Function
당신이 TABLE [출석] DROP 제약 [SessionAttendance]'대신 ALTER'시도해 봤어? –
감사합니다. 그게 효과가 있었어. 외래 테이블 (Attendance)에서 제약 조건을 삭제할 때 문이 성공했습니다. 분명히 제약 조건을 기본 테이블에 추가 할 수 있지만 외부 테이블에서 삭제해야합니다. –