实际上,我试图找出数据库表中是否存在partno,并且在count = checkCommand.ExecuteReader sataement中需要很长时间
请找到以下方法
Public Function CheckProductNo(ByVal Partno As String) As Boolean
Dim count As SqlDataReader
Dim valid As Boolean = False
Using connection As New SqlConnection
connection.Open()
Using checkCommand As New SqlCommand("PartNo_check", connection)
checkCommand.CommandType = CommandType.StoredProcedure
checkCommand.Parameters.Add(New SqlParameter("@PartNo", Partno))
count = checkCommand.ExecuteReader
If count.ToString > 0 Then
valid = True
End If
End Using
End Using
Return valid
End Function
STORED PROCEDURE
CREATE PROCEDURE PartNo_Check
@PartNo VARCHAR(30)
AS
SELECT PartNo from T_Product where PartNo=@Partno
Thanks
答案 0 :(得分:1)
重要的是具体说明你的代码应该做什么 - 看起来就像你试图确定某些东西是否存在,而不是它的计数或其他属性。为此,我会修改你的sproc如下:
STORED PROCEDURE
CREATE PROCEDURE PartNo_Check
@PartNo VARCHAR(30)
AS
SET NOCOUNT ON;
SELECT CASE WHEN EXISTS ( SELECT PartNo
FROM T_Product
where PartNo=@Partno) THEN 1
ELSE 0
END
从理论上讲,这应该是你想要做的最好的,你应该确保ParNo列上有一个索引,正如史蒂夫所说的那样。然后您的方法可以写成:
Public Function CheckProductNo(ByVal Partno As String) As Boolean
Using connection As New SqlConnection
connection.Open()
Using checkCommand As New SqlCommand("PartNo_check", connection)
checkCommand.CommandType = CommandType.StoredProcedure
checkCommand.Parameters.Add(New SqlParameter("@PartNo", Partno))
return convert.toboolean(checkCommand.executescalar)
End Using
End Using
End Function
答案 1 :(得分:0)
假设您的PartNo_check仅返回单个数值,请尝试使用
Dim result As Integer = Convert.ToInt32(checkCommand.ExecuteScalar())
使用给定的存储过程代码,然后使用
Dim result As String = checkCommand.ExecuteScalar().ToString()
如果存储过程只返回一行,其中一列执行,则ExecuteScalar将该唯一结果作为其返回值。忽略其他列或行
答案 2 :(得分:0)
我会尝试从下往上调试问题;您可以通过在某种SQL管理工具中查询存储过程来检查存储过程是否花费了太多时间。
如果是这种情况,我的第一个决议是优化数据库,检查索引等。
答案 3 :(得分:0)
如果您的目标是确认Partno是否有数据,那么我建议您将查询修改为:
STORED PROCEDURE
CREATE PROCEDURE PartNo_Check
@PartNo VARCHAR(30)
AS
SELECT Top 1 PartNo from T_Product where PartNo=@Partno
然后你必须
count = checkCommand.ExecuteReader
If count.HasRow then valid=true
这是针对您的问题,但如果您想操纵任何相关数据,这将不是一个好的解决方案。
希望这项工作尽可能快!