首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2011-12-29 
请教一下数据库的问题程序是用vb.net2005编写的。DimDSAsSystem.Data.DataSetDimMyCommandAsSystem.Data.Ol

请教一下数据库的问题
程序是用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列进行更新

热点排行