Winforms Datagridview插入/选择/删除失败

Winforms Datagridview插入/选择/删除失败,winforms,datagridview,oledbconnection,oledbdataadapter,updatecommand,Winforms,Datagridview,Oledbconnection,Oledbdataadapter,Updatecommand,我正在尝试创建一个带有DataGridView的主细节表单,所有这些都是代码。选择/填充部分工作正常,但我在更新/插入/删除方面遇到了问题(在表单关闭时应自动发生)。以下代码给出了错误: 更新要求UpdateCommand具有连接对象。这个 UpdateCommand的连接属性尚未初始化 在.Update行中 我尝试将连接移出GetData()过程,但这不是答案 我该怎么办 代码: 在下面的代码中,您将连接对象传递给选择命令 ' set up the master daMaster = New

我正在尝试创建一个带有DataGridView的主细节表单,所有这些都是代码。选择/填充部分工作正常,但我在更新/插入/删除方面遇到了问题(在表单关闭时应自动发生)。以下代码给出了错误:

更新要求UpdateCommand具有连接对象。这个 UpdateCommand的连接属性尚未初始化

.Update
行中

我尝试将连接移出GetData()过程,但这不是答案

我该怎么办

代码:


在下面的代码中,您将
连接对象
传递给
选择
命令

' set up the master
daMaster = New OleDbDataAdapter("SELECT * FROM GFFTranslator", cnn)
完成
.Fill()
方法后,您的
连接对象将关闭

daMaster.Fill(dsGFF, "GFFTranslator") 
您现在正试图创建一个
UPDATE
命令,但没有向它传递一个连接对象以供其使用

daMaster.UpdateCommand = New OleDbCommand("UPDATE GFFTRanslator" & _
                                          "   SET FileType = ?" & _
                                          "     , FieldPosition = ?" & _
                                          "     , FieldType = ?" & _
                                          "     , StartRepeatingSection = ?" & _
                                          "     , FileTypeIdentifier = ?" & _
                                          "     , Flag = ?" & _
                                          "     , DataStart = ?" & _
                                          "     , DataLength = ?" & _
                                          "     , NextLine = ?" & _
                                          "     , Lookup = ?" & _
                                          "     , Title = ?" & _
                                          "     , ExtraInfo = ?" & _
                                          " WHERE FileType = ?" & _
                                          "   AND FieldPosition = ? ;")
daMaster.UpdateCommand.Parameters.Add("@FileType", OleDbType.VarChar, 255, "FileType")
daMaster.UpdateCommand.Parameters.Add("@FieldPosition", OleDbType.Integer, 4, "FieldPosition")
daMaster.UpdateCommand.Parameters.Add("@FieldType", OleDbType.VarChar, 255, "FieldType")
daMaster.UpdateCommand.Parameters.Add("@StartRepeatingSection", OleDbType.Boolean, 1, "StartRepeatingSection")
daMaster.UpdateCommand.Parameters.Add("@FileTypeIdentifier", OleDbType.Boolean, 1, "FileTypeIdentifier")
daMaster.UpdateCommand.Parameters.Add("@Flag", OleDbType.Boolean, 1, "Flag")
daMaster.UpdateCommand.Parameters.Add("@DataStart", OleDbType.Integer, 5, "DataStart")
daMaster.UpdateCommand.Parameters.Add("@DataLength", OleDbType.Integer, 5, "DataLength")
daMaster.UpdateCommand.Parameters.Add("@NextLine", OleDbType.Boolean, 1, "NextLine")
daMaster.UpdateCommand.Parameters.Add("@Lookup", OleDbType.Boolean, 1, "Lookup")
daMaster.UpdateCommand.Parameters.Add("@Title", OleDbType.VarChar, 255, "Title")
daMaster.UpdateCommand.Parameters.Add("@ExtraInfo", OleDbType.VarChar, 255, "ExtraInfo")
因此,要解决此问题,请执行以下操作:

"   AND FieldPosition = ? ;", cnn) // Pass your connection object here.

你在哪里打开连接?我看到了您的连接字符串,但没有隐式的
conn.Open()
DataAdapters
自动打开/关闭连接,但您仍应在连接对象上调用
.open()
。我没有意识到我需要打开它,因为数据加载正常。我试图在声明后添加它,但仍然得到相同的错误。也尝试在Finalize部分添加它,但没有乐趣。事实上,我想我可能已经发现了你的问题。您不必总是在
UPDATE
命令中传递连接,但在这种情况下,您应该传递,因为它在当前形式下没有任何连接。该类为此内置了重载。我刚刚尝试将连接添加到updatecommand,但现在出现错误,表示没有为一个或多个必需参数提供值。
"   AND FieldPosition = ? ;", cnn) // Pass your connection object here.