读书人

请问一下数据库的有关问题

发布时间: 2011-12-29 22:09:38 作者: rapoo

请教一下数据库的问题
程序是用vb.net2005编写的。

Dim DS As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim MyBuild As System.Data.OleDb.OleDbCommandBuilder

DS = New System.Data.DataSet
MyConnection = New System.Data.OleDb.OleDbConnection( "provider=Microsoft.Jet.OLEDB.4.0; " & "data source= " & "c:\1.xls " & "; " & "Extended Properties= " "Excel 8.0; HDR=YES; IMEX=1; " " ")
MyCommand = New System.Data.OleDb.OleDbDataAdapter( "select * from [Sheet1$] ", MyConnection)
MyBuild = New System.Data.OleDb.OleDbCommandBuilder(MyCommand)
MyBuild.QuotePrefix = "[ "
MyBuild.QuoteSuffix = "] "
MyCommand.Fill(DS, "数据 ")

Dim MyColumn(1) As DataColumn
MyColumn(0) = DS.Tables( "数据 ").Columns( "学号 ")
DS.Tables( "数据 ").PrimaryKey = MyColumn

MyCommand.UpdateCommand = MyBuild.GetUpdateCommand
MyCommand.InsertCommand = MyBuild.GetInsertCommand
MyCommand.DeleteCommand = MyBuild.GetDeleteCommand

DS.Tables( "数据 ").Rows(0)( "姓名 ") = "张三 "

MyCommand.Update(DS, "数据 ")


如果执行到“MyCommand.UpdateCommand = MyBuild.GetUpdateCommand”,那么就会提示错误“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”

如果注释这句,那么执行到“MyCommand.Update(DS, "数据 ")”,那么也会出现“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”

我去网上查了一下,说是数据库必须要有“主键”才能更新,那么请问怎么解决这个问题?Excel里可以设置“主键”?




有人说可以重写updatecommand来解决,可以重写之后更新命令通过了,但是执行到“MyCommand.Update(DS, "数据 ") ”却出现了另一条提示“操作必须使用一个可更新的查询”。

Excel文件是放在了FAT32格式下,应该不存在权限的问题。

请问这个怎么解决?


[解决办法]
错误的原因是没有主键信息,组主键信息不是你的DS.Tables( "数据 ").PrimaryKey = MyColumn


MyCommand = New System.Data.OleDb.OleDbDataAdapter( "select * from [Sheet1$] ", MyConnection)
' 加上下面这句
MyCommand.MissingSchemaAction = MissingSchemaAction.AddWithKey
[解决办法]
理解错了,这种错误是指在更新时内存表中待更新的字段没有对应的主键。比如:数据库表中有主键ID,但你用内存表更新数据时,没有同时选择ID列进行更新

读书人网 >VB Dotnet

热点推荐