我正在使用使用sql server数据库的应用程序。我正尝试在表中插入一行,如下所示。该表具有主键“ prodNum”。它是自动生成的密钥。
当我尝试在表格中插入一行,如下所示时,在第intResult = oSglProdTableAdapt.Update(oCableRecDataSet, "ProdTable")
行,我遇到了异常:
{“列'prodNum'是只读的。”}
正如您所见,在创建数据行时,我什至没有为'prodNum'列设置值。但是更新函数也尝试为该列写入值。 我试图在SQL Management Studio软件中使用插入查询进行插入。那里工作正常。因此,我认为问题出在我的代码上。我有什么想念的吗?
' a record does not exist for the new Cable Product
' therefore insert a new data row in the ProdTable table
' clear the DataSet
oCableRecDataSet.Clear()
' create the Data Row
Dim oDR As DataRow = oCableRecDataSet.Tables("ProdTable").NewRow()
' populate the datarow with values
'oDR("ProductIDNum") = 102
oDR("ProductID") = ProductID
oDR("DefinedDate") = DefinedDate
oDR("OperID") = OperID
oDR("CutsizeBased") = CutsizeBased
ProdTable.AddDRofProdTable(oDR)
' add the datarow to the dataset
oCableRecDataSet.Tables("ProdTable").Rows.Add(oDR)
' update the Database with values from Dataset with the Data adapter
intResult = oSglProdTableAdapt.Update(oCableRecDataSet, "ProdTable")
Public Sub AddDRofCableDef(ByRef oDR As DataRow)
oDR("Upper") = m_Upper
oDR("Spec") = m_Spec
oDR("IlUpper") = m_IlUpper
oDR("IlLower") = m_lIlLower
oDR("Spec") = m_Spec
oDR("MeanUpper") = m_MeanUpper
oDR("MeanLower") = m_MeanLower
oDR("MeanUL") = m_MeanUL
oDR("MeanLL") = m_MeanLL
oDR("SUL") = m_SUL
oDR("StartZone") = m_StartZone
End Sub
堆栈跟踪如下:
在System.Data.DataRow.set_Item(DataColumn列,对象值)在 System.Data.DataRow.set_Item(字符串columnName,对象值)位于 ACMS.DBCableRecordsCommands.OnRowUpdated(对象发送者, OleDbRowUpdatedEventArgs args) D:\ Software \ clsDBCableRecordsCommands.vb:956行位于 System.Data.OleDb.OleDbRowUpdatedEventHandler.Invoke(对象发送方, OleDbRowUpdatedEventArgs e)在 System.Data.OleDb.OleDbDataAdapter.OnRowUpdated(RowUpdatedEventArgs 值),位于System.Data.Common.DbDataAdapter.Update(DataRow [] dataRows,DataTableMapping tableMapping) System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable,DataTableMapping tableMapping) System.Data.Common.DbDataAdapter.Update(DataSet dataSet,字符串 srcTable) ACMS.DBCableRecordsCommands.insertCableRecord(DBCableRecords电缆)在 D:\ Software \ clsDBCableRecordsCommands.vb:第251行
更新 当我检查生成的数据行时,我注意到一件事,即使我没有初始化该值,它也已经计算了ProdNum(主键)。这可能是sql server不接受的原因。如何停止通过数据行生成主键?
答案 0 :(得分:0)
我假设“ oCableRecDataSet”是您的数据集的名称,并且该数据集仅包含一个表,因此您可以尝试以下操作:
oCableRecDataSet.Tables(0).Columns("produNum").ReadOnly = false
intResult = oSglProdTableAdapt.Update(oCableRecDataSet, "ProdTable")