Asp.net 如何检查SQL数据库表以查看记录是否存在

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

我有一个SQL数据库,它为用户上传到服务器的每个文档创建一个记录。我希望在用户上载文档之前检查此表,以确保他们不会上载名称为已存在的文件

我知道如何建立连接并使用SqlCommand查询表中的现有记录。但是我不知道如何从我发出的sqlCommand检查记录计数

这有意义吗

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*。是的,您是对的,查询现在已更新,谢谢您提供的信息