插入到具有只读主键列的表中

时间:2018-08-07 11:33:25

标签: sql-server database vb.net

我正在使用使用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不接受的原因。如何停止通过数据行生成主键?

1 个答案:

答案 0 :(得分:0)

我假设“ oCableRecDataSet”是您的数据集的名称,并且该数据集仅包含一个表,因此您可以尝试以下操作:

oCableRecDataSet.Tables(0).Columns("produNum").ReadOnly = false
intResult = oSglProdTableAdapt.Update(oCableRecDataSet, "ProdTable")