我设计了 Webservice api,每次我通过 webservice 推送数据时,这就是我得到的回报
MOV =“违反主键约束'PK_Vehicle_Transactions'。无法在对象'dbo.Vehicle_Transactions'中插入重复的键。该语句已终止。”就像 api 不知道在哪里停止以及在哪里继续!请参阅下面我的源代码,谢谢
Public Sub uploadVehicle_Transaction()
Try
'do for sync indacator for proper upload in action
Dim VT As New DataTable
VT = New Statn_Sync.DataSetTableAdapters.Vehicle_TransactionsTableAdapter().GetData()
For Each dr As DataRow In VT.Rows
Dim iCount As Integer = 0
Dim MOV As String = comT.insertVehicle_Transaction(Convert.ToInt64(dr("TransactionID")), _
Convert.ToDateTime(dr("Transaction_date")), _
Convert.ToInt32(dr("Bank")), _
Convert.ToString(dr("Teller_number")), _
Convert.ToInt32(dr("Amount")), _
Convert.ToString(dr("Generated_by")), _
Convert.ToString(dr("Station")), _
Convert.ToString(dr("Customer_name")), _
Convert.ToInt32(dr("Transaction_category")), _
Convert.ToString(dr("Deposit_slip")), _
Convert.ToInt32(dr("Sync")), _
Convert.ToDecimal(dr("Penalty")), _
Convert.ToDecimal(dr("OGSG")), _
Convert.ToDecimal(dr("CMR")), _
Convert.ToDecimal(dr("Goshen")), _
Convert.ToDecimal(dr("Insurance")), _
Convert.ToDecimal(dr("OCost")), _
Convert.ToDecimal(dr("OGSG_Renewal")), _
Convert.ToDecimal(dr("De_pulse")))
iCount += 1
Label1.Text = " Auto Sync: " & iCount
'update record
Dim pls As String = dr("TransactionID").ToString
If (pls Is MOV) Then
AddToLog((Convert.ToString(": transferred") & MOV.ToString() & Text) + Environment.NewLine)
vta.UpdateTrans(dr("TransactionID"))
End If
Next
Catch ex As Exception
AddToLog(ex.Message.ToString)
End Try
End Sub
例外已经说明了这一点:Violation of PRIMARY KEY constraint 'PK_Vehicle_Transactions'
。该表已包含具有主键的行(TransactionID
)给定。 A首要的关键 http://www.w3schools.com/sql/sql_primarykey.asp在整张桌子上都是独一无二的。
您的问题有多种解决方案:
1)计算最新的TransactionID
VT = New Statn_Sync.DataSetTableAdapters.Vehicle_TransactionsTableAdapter().GetData()
//Use query to select Max value of TransactionID (something like)
Dim maxPK as Long = 'SELECT MAX(TransactionID) FROM dbo.Vehicle_Transactions'
//Increase the MaxPK with 1 to avoid duplicate key
maxPK = maxPK + 1
For Each dr As DataRow In VT.Rows
Dim iCount As Integer = 0
//Use our variable in the insert
Dim MOV As String = comT.insertVehicle_Transaction((maxPK + iCount), _
Convert.ToDateTime(dr("Transaction_date")), _
2) Use Auto Increment
on TransactionID
of dbo.Vehicle_Transactions
为此我参考了以下帖子:自动递增 https://stackoverflow.com/questions/10991894/auto-increment-primary-key-in-sql-server-management-studio-2012.这篇文章是为MSSQL 2012的管理工作室制作的。但相同的逻辑适用于早期版本(2008,2005)
其他解决方案可以在 StackOverflow 中找到
如果我能提供任何进一步的帮助,请随时给我签名!
Note:如果之前的数据对您没有用处,您可以随时clear the table
在使用查询插入之前:DELETE FROM dbo.Vehicle_Transactions
此查询从表中删除所有行。尽管你必须警惕任何Forgein Keys
因为它们可能会导致数据丢失/异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)