У меня возникли проблемы с парнями. После нескольких дней работы, отладки и исследования, я на 3-й на последнюю строку и застрял. Это не полный код, а соответствующие части.Невозможно правильно установить первичный ключ для таблицы в vb.net
Dim dbProvider As String
Dim dbSource As String
Dim con As New OleDb.OleDbConnection
Dim ds As New DataSet
Dim MaxRows As Integer
Dim sql As String
Dim TableName As String
TableName = TbTableName.Text
Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM [" & TableName & "]", con)
Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow
Dim dsNewColoumn As DataColumn
dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
dbSource = "Data Source = E:\A2 Computing\Project\PasswordDatabase.mdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
Dim TableCreate As New OleDb.OleDbCommand("CREATE TABLE [" & TableName & "](" & "ID INTEGER NOT NULL" & ")", con)
Dim NewColoumn As New OleDb.OleDbCommand("ALTER TABLE [" & TableName & "] ADD " & X & " VARCHAR(60)", con)
TableCreate.ExecuteNonQuery()
da.Fill(ds, "NewTable")
MaxRows = ds.Tables("NewTable").Rows.Count
ds.Tables("NewTable").PrimaryKey = New DataColumn() {ds.Tables("NewTable").Columns("CustID")}
X = 0
Do
X = X + 1
dsNewColoumn = ds.Tables("NewTable").Columns.Add
ds.Tables("NewTable").Columns.Add(X)
dsNewRow = ds.Tables("NewTable").NewRow()
ds.Tables("NewTable").Rows.Add(dsNewRow)
Loop Until X = 30
da.InsertCommand = cb.GetInsertCommand()
da.UpdateCommand = cb.GetUpdateCommand()
da.Update(ds, "NewTable")
End Sub
Проблема им с находится на этой линии здесь
da.UpdateCommand = cb.GetUpdateCommand()
Ошибка
Dynamic SQL поколения для UpdateCommand не поддерживается против SelectCommand, которая не возвращает какой-либо ключевой информации столбца ,
Я понимаю, это означает, что у моего стола нет первичного ключа, но я его установил. Любая помощь будет принята с благодарностью! =)
Спасибо за быстрый ответ, таблица оленья кожа имеет первичный ключ, потому что код во время выполнения делает таблицу. Учитывая то, что вы сказали, я думаю, мне нужно найти способ сделать первичный ключ до того, как будет выполнена строка 'da.fill'. Мой вопрос: как мне это сделать? Я не знаю эксперта в программировании или использовании OLEDB, однако я думал, что манипулирование таблицей можно было бы сделать только путем копирования ее в набор данных и затем обновления набора данных в исходную таблицу? Ну, это то, что интернет сказал мне, по крайней мере, =) Еще раз спасибо – Mohjo
@mohjo - Просто добавьте первичный ключ самостоятельно после создания таблицы: '" ALTER TABLE "& TableName &" ADD PRIMARY KEY ("& ColumName &") "' –
@MattWilko Ok Im confused xD, вы имеете в виду создать таблицу, а затем использовать команду command.executenonquery с этим в качестве оператора SQL? – Mohjo