Jon*_*ood 0 c++ sql-server odbc
我正在编写一个ODBC类以连接到远程SQL Server数据库。我大部分工作。
该类具有生成查询的能力,例如:
更新客户SET Id = ?、 Name = ?、 TaxId = ?、 ContactFName = ?、 ContactLName = ?、 Phone_Office = ?、 Phone_Mobile = ?、 Phone_Home = ?、 Email = ?、 Website = ?、 Address1_Physical = ?、 Address2_Physical =? ,City_Physical = ?、 State_Physical = ?、 Zip_Physical = ?、 Address1_Billing = ?、 Address2_Billing = ?、 City_Billing = ?、 State_Billing = ?、 Zip_Billing = ?、 StartingBalance = ?、 Discount = ?、 BillingSequence = ?、 BillingCategory = ?, Active = ?, CreateDate =?
如您所见,这是一个UPDATE查询。但是,运行此查询给我一个错误:
用于SQL Server(SQL Server)的Microsoft ODBC驱动程序17:返回码:-1:违反主键约束'PK_Customers'。无法在对象“ dbo.Customers”中插入重复键。重复键值为(82)。(状态:23000,NativeError:2627):语句已终止。(状态:01000,NativeError:3621)
我很困惑为什么在进行更新时出现插入错误。有人看过吗?
笔记:
Id是主键。我首先从数据库中读取所有列值,然后更新我要更改的值。该ID也不会改变。SQLGetDiagRec()。UPDATE语句上没有WHERE子句,因此它试图更新数据库中的每个单行,并且由于ID是要更改的列之一,因此它试图将每一行的ID设置为相同的值。这导致尝试创建重复的主键。
确保您的UPDATE语句具有适当的WHERE子句...,例如“ WHERE ID =?” ...,并且如果不更改ID,则最好的做法是不将该ID包含在该UPDATE语句中。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |