我正在编写一个程序,需要在其中使用SQL将数据插入数据库中。但是我意识到我需要使用验证来确保相同的x.name不会两次输入数据库。 (FormBoxes是一个对象列表)该代码需要从数据库中读取,而不要添加ID列中已经存在的数据
答案 0 :(得分:0)
我倾向于认为您想一直避免在此列中重复,而不仅是针对这段特定的代码。如果是这样,我建议您仅在该列上创建一个唯一约束:
ALTER TABLE tblDate ADD CONSTRAINT ID_UNIQUE_CONSTRAINT UNIQUE (ID);
然后,您的RDBMS将强制执行数据完整性(这是他们做得很好的事情)。如果尝试插入重复项,则会出现一个特定的错误,可以在应用程序中捕获并处理该错误(在用例中,可能会忽略它)。
答案 1 :(得分:0)
请尝试执行此操作,但建议您更改要索引ID的表:
insert into tblDate (ID)
SELECT drvd1.tID FROM (
select @ID as tID) as drvd1 left join tblDate on ID=drvd1.tID
where tblDate.ID is NULL;
如果您的数据库不是SQL Server,则无法使用以上选项,对于MS Access,我已经创建了另一个
答案 2 :(得分:0)
对于ms Access,您可以使用note进行操作,至少在tblDate中有1条记录:
matrix([[0. , 0.125, 0.75 , 0. , 0. ],
[0.125, 0. , 0. , 0. , 0. ],
[0.75 , 0. , 0. , 0. , 0.375],
[0. , 0. , 0. , 0. , 1.2 ],
[0. , 0. , 0.375, 1.2 , 0. ]])
答案 3 :(得分:0)
您忘记了Access并不关注命名参数。重要的是将参数添加到参数集合的顺序。他们只是“?”访问Access,因此我们需要为2个参数分配相同的值。
Using...End Using
块将关闭并处置您的数据库对象。
请勿使用.AddWithValue
。参见http://www.dbdelta.com/addwithvalue-is-evil/
和
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
还有一个:
https://dba.stackexchange.com/questions/195937/addwithvalue-performance-and-plan-cache-implications
这是另一个
https://andrevdm.blogspot.com/2010/12/parameterised-queriesdont-use.html
仅在For循环外创建一个命令,并仅填充一个参数集合。在循环内部只需更改参数的值即可。
Private Sub UpdateAccess()
Using cn As New OleDbConnection("Your connection string"),
cmd As New OleDbCommand("INSERT INTO tblDate (ID) VALUES (@ID) WHERE Not EXISTS(Select * FROM tblDate WHERE ID = @ID2)", cn)
cmd.Parameters.Add("@ID", OleDbType.Integer)
cmd.Parameters.Add("@ID2", OleDbType.Integer)
cn.Open()
For Each X In FormBoxes
cmd.Parameters("@ID").Value = X.Name
cmd.Parameters("@ID2").Value = X.Name
Next
End Using
End Sub