Asp.net 如何检查SQL数据库表以查看记录是否存在
我有一个SQL数据库,它为用户上传到服务器的每个文档创建一个记录。我希望在用户上载文档之前检查此表,以确保他们不会上载名称为已存在的文件 我知道如何建立连接并使用SqlCommand查询表中的现有记录。但是我不知道如何从我发出的sqlCommand检查记录计数 这有意义吗Asp.net 如何检查SQL数据库表以查看记录是否存在,asp.net,vb.net,Asp.net,Vb.net,我有一个SQL数据库,它为用户上传到服务器的每个文档创建一个记录。我希望在用户上载文档之前检查此表,以确保他们不会上载名称为已存在的文件 我知道如何建立连接并使用SqlCommand查询表中的现有记录。但是我不知道如何从我发出的sqlCommand检查记录计数 这有意义吗 Using myConnectionCheck As New SqlConnection(myConnectionStringCheck) Dim myCommandCheck As New S
Using myConnectionCheck As New SqlConnection(myConnectionStringCheck)
Dim myCommandCheck As New SqlCommand()
myCommandCheck.Connection = myConnectionCheck
myCommandCheck.CommandText = "SELECT * FROM Req_Docs WHERE Doc_Name =" & DocName
myConnectionCheck.Open()
myCommandCheck.ExecuteNonQuery()
End Using
提前感谢,
Anthony如果存在此问题,请使用
create procedure isDocExists
@DocName varchar(255),
@isExists bit output
as
set @isExists = 0
if exists (SELECT Doc_Name FROM Req_Docs WHERE Doc_Name =@DocName)
begin
set @isExists=1
end
检查记录是否存在的位置是一个函数,它返回一个整数,该整数等于受查询影响的行数 但是,它通常用于更新
您可以考虑ExcuteSkar,它返回结果集中第一行的第一列。
因此,如果您将查询更改为从…选择计数(*),ExecuteScalar的结果将是行数,您可以测试行数。如果您想要计数:SELECT COUNT(*) as count FROM Req_Docs WHERE Doc_Name = 'DocName'
这里有很多错误:
- 检查时与上载时之间的竞争条件
- 应该合法地允许多个文档具有相同的名称。使用标签、文件夹、时间戳或其他方式来区分它们
- name参数上存在Sql注入漏洞
- SELECT查询上的ExecuteOnQuery()
Using cn As New SqlConnection(myConnectionStringCheck), _
cmd As New SqlCommand("SELECT COUNT(*) FROM (SELECT TOP 1 1 FROM Req_Docs WHERE Doc_Name= @DocName) t", cn)
cmd.Parameters.Add("@DocName", SqlDbTypes.VarChar, 255).Value = DocName
cn.Open()
Return CInt(cmd.ExecuteScalar())
End Using
最好使用IF EXISTS()-一旦找到第一个匹配项,它将停止,而COUNT(*)将扫描整个表……可能在WHERE语句中有限制1,它可能具有类似的复杂性:)+1 for IF EXISTS()。唯一需要注意的是将SELECT*更改为SELECT Doc\ U Name,这样查询只需要抓取一列。可能会被认为是吹毛求疵,但SQL人员会告诉您,除非出于性能原因需要,否则不应使用SELECT*。是的,您是对的,查询现在已更新,谢谢您提供的信息