0

我已经搜索了谷歌和 youtube,当然也在这里,我找不到答案。我需要打开和关闭身份插入,但不知道如何在 ADO.Net 项目的 sql 命令中执行此操作。我敢肯定,对于经验丰富的人来说,这一定非常容易。

附加信息 我正在使用 c#、visual studio 和 sql server,我不知道这是否有助于缩小问题范围?

这是我在 ado.net 项目中尝试的 sql 命令。

sql = "SET IDENTITY_INSERT HomeCareVisit ON insert into HomeCareVisit values(" 
       + VisitRefNo + ",'" + PatientNo + "','" + ScheduledDateTime + "','" 
       + TreatmentInstructions + "','" + MedicalStaffID + "','" + Priority + "','" 
       + ActualVisitDateTime + "','" + TreatmentProvided + "','" + Prescription 
       + "','" + AdvisoryNotes + "'," + (FurtherVisitRequired ? "1" : "0") + " );"; 

它给出了错误

违反主键约束“PK_VisitRefNo”。无法在对象“dbo.HomeCareVisit”中插入重复键。该语句已终止。

这是代码显示该列是什么数据类型

VisitRefNo = ds.Tables[0].Rows[i].ItemArray[0].ToString();
PatientNo = Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[1]);
ScheduledDateTime = Convert.ToDateTime(ds.Tables[0].Rows[i].ItemArray[2]);
TreatmentInstructions = ds.Tables[0].Rows[i].ItemArray[3].ToString();
MedicalStaffID = Convert.ToInt32(ds.Tables[0].Rows[i].ItemArray[4]);
Priority = ds.Tables[0].Rows[i].ItemArray[5].ToString();
ActualVisitDateTime = Convert.ToDateTime(ds.Tables[0].Rows[i].ItemArray[6]);
TreatmentProvided = ds.Tables[0].Rows[i].ItemArray[7].ToString();
Prescription = ds.Tables[0].Rows[i].ItemArray[8].ToString();
AdvisoryNotes = ds.Tables[0].Rows[i].ItemArray[9].ToString();
FurtherVisitRequired = Convert.ToBoolean(ds.Tables[0].Rows[i].ItemArray[10]);
4

2 回答 2

1

这是执行此操作的命令

SET IDENTITY_INSERT YourTable ON
于 2013-08-20T11:06:49.630 回答
0

尝试这个:

sql = "SET IDENTITY_INSERT HomeCareVisit ON insert into HomeCareVisit(column_names) values(" 
       + VisitRefNo + ",'" + PatientNo + "','" + ScheduledDateTime + "','" 
       + TreatmentInstructions + "','" + MedicalStaffID + "','" + Priority + "','" 
       + ActualVisitDateTime + "','" + TreatmentProvided + "','" + Prescription 
       + "','" + AdvisoryNotes + "'," + FurtherVisitRequired + " );";

wherecolumn_names是按插入顺序排列的表列列表。

我认为您在表不期望的地方传递字符串,例如 TreatmentProvided 列(按名称,我假设您传递 True/False,但不是作为字符串传递)。

于 2013-08-20T11:23:23.213 回答