1
我遇到了一些麻煩傢伙。在經過幾天的勞動,調試和研究之後,即時在第三線和最後一線,我卡住了。這不是完整的代碼,而是相關的部分。無法正確設置主鍵在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
遇到的問題IM是在這條線在這裏
da.UpdateCommand = cb.GetUpdateCommand()
的錯誤是
不支持針對不返回任何鍵列信息的SelectCommand動態SQL生成的更新命令。
我明白這意味着我的表沒有主鍵,但我已經設置了一個。任何幫助將不勝感激! =)
感謝快速回復一些好文章/書,表可是沒有一個主鍵,因爲在運行時的代碼,使表。考慮到你所說的話,我想我需要找到一種方法在執行'da.fill'行之前創建一個主鍵。我的問題是我如何做到這一點?我遠不及編程或使用OLEDB方面的專家,但我認爲只能通過將表格複製到數據集然後將數據集更新到原始表來操作表格?那麼這就是互聯網告訴我至少=)再次感謝 – Mohjo
@mohjo - 只需在創建表後自己添加一個主鍵:'「ALTER TABLE」&TableName&「ADD PRIMARY KEY(」&ColumName&「 )「' –
@MattWilko好吧我困惑的xD,你的意思是創建表,然後使用command.executenonquery與此作爲SQL語句? – Mohjo