我有一个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
提前致谢,
安东尼
答案 0 :(得分:2)
使用if exists
解决此问题
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
检查记录在哪里
答案 1 :(得分:2)
这里有很多错误:
我会向你提供前两点的疑问,你仍然可以允许上传,这样你就可以询问用户他们想要如何关联文件。鉴于此,以下是您如何修复其他两个:
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
答案 2 :(得分:1)
ExecuteNonQuery
是一个函数,它返回一个等于查询影响的行数的整数。
但是,它通常用于更新。
您可以考虑使用ExecuteScalar,它返回结果集中第一行的第一列。
因此,如果您将查询更改为select count(*) from...
,则ExecuteScalar的结果将是行数,然后您可以对其进行测试。
答案 3 :(得分:0)
如果你想要数:
SELECT COUNT(*) as count FROM Req_Docs WHERE Doc_Name = 'DocName'