0

实际上,我试图找出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 
4

4 回答 4

1

重要的是要具体说明您的代码应该做什么 - 在我看来,您正在尝试确定某物是否存在,而不是它的计数或其他属性。为此,我将修改您的存储过程如下:

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
于 2012-06-13T14:57:05.740 回答
0

假设您的 PartNo_check 只返回一个数值,然后尝试使用

Dim result As Integer = Convert.ToInt32(checkCommand.ExecuteScalar())

使用给定的存储过程代码,然后使用

Dim result As String = checkCommand.ExecuteScalar().ToString()

如果您的存储过程只返回一行一列,则 ExecuteScalar 将该唯一结果作为其返回值。其他列或行被忽略

请参阅 MSDN 参考资料

于 2012-06-13T11:14:15.020 回答
0

我会尝试自下而上调试问题;您可以通过在某种 SQL 管理工具中查询来检查存储过程是否花费了太多时间。

如果是这种情况,我的第一个解决方案是优化数据库、检查索引等。

于 2012-06-13T11:14:20.820 回答
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

这是针对您的问题的,但是如果您想操作任何相关的数据,这不是一个好的解决方案。

希望这能像你希望的那样快!

于 2012-06-13T12:50:28.530 回答