【发布时间】:2014-08-22 11:36:57
【问题描述】:
我在将新患者添加到我的 SQL 数据库时遇到问题。当我这样做时,会出现以下错误,并引发 SQL 异常。
无法将值 NULL 插入到列“ID”、表“IntelliMedDB.dbo.PatientRecord”中;列不允许空值。插入失败。
作为参数添加的所有值中包含的信息实际上不为空。它们里面都有信息。
现在,为了防止 SQL 注入攻击,我的所有查询都使用参数化值。
我有一个 MS Access 数据库,可以很好地处理所有这些问题(同样的查询,我刚刚从使用 OleDBCommand 切换到 SqlCommand。除此之外,没有任何变化)。
这是“INSERT INTO”语句,后面跟着一个参数化查询,这样大家就可以看到我做了什么:
INSERT INTO PatientRecord (patientID, firstName, lastName, patientGender, dateOfBirth, residentialAddress, postalAddress, nationalHealthNumber, telephoneNumber, cellphoneNumber)
VALUES (@patientIDNumber, @recepPatFirstName, @recepPatLastName, @recepPatGender, @recepPatDateOfBirth, @recepPatResidentialAddress, @recepPatPostalAddress, @recepNHINumber, @recepPatTelephone, @recepPatCellularNumber)";
(对于查询的长度,我深表歉意)。
现在,参数化值之一:
recepPatRecordCommand.Parameters.AddWithValue("@recepPatFirstName", patRecepFirstName);
感谢您的帮助。
谢谢!
【问题讨论】:
-
此程序是否用于创建新患者?如果是这样,您不太可能想要传递
patientID。单步执行你的代码,插入前patientID的值是多少? -
如果存在
recepPatRecordCommand.Parameters.AddWithValue("@patientID",.....行,您可以显示吗?或者,您可以将PatientID设置为表中的主键索引吗?那会更有意义。 -
您的表有一个名为 ID 的列,该列可能是主键。检查是否在列属性中设置了 IDENTITY = Yes
-
嗨,史蒂夫,我正在运行 SQL Server 2014。请给我一些有关如何执行此操作的说明吗? @Jason Evans ID 是 Access 用来跟踪数据库中有多少记录的自动编号。患者 ID 用于实际的患者记录(阻止 ID 到处乱跑)。
-
@DGibbs 一旦用户选择“新患者”选项,就会分配“患者ID”,因此该参数已经包含一个值。这是必要的,这样用户才能在屏幕上实际显示特定的 ID 记录(我通过使用阅读器来做到这一点)。