2012-06-13 160 views
0

其實,我試圖找出wheather的PARTNO在數據庫表中現有的或不和它需要很長一段時間在數= 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 [email protected] 

Thanks 
+0

「PartNo_check」存儲過程的代碼是什麼?爲什麼你使用SqlDataReader.ToString() – Steve

+0

請找到存儲過程,那麼問題是在checkcommad.executeredaer,我沒有機會進一步看到並做隨機實驗 –

+0

T_Product有多少行?如果它很大,你可能想要考慮在PartNo –

回答

0

假設你PartNo_check只返回一個數值,然後嘗試使用

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

按照給定的存儲過程的代碼n使用

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

如果存儲過程返回一個列的ExecuteScalar只有一行採取獨特的結果作爲它的返回值。其他列或行被忽略

See MSDN references

+0

hi steve上添加一個索引,對不起。它沒有任何區別,我嘗試了兩種 –

+0

你是否有該PartNo字段的索引?緩慢只是在這個特定的操作或更廣泛的? – Steve

+0

它只適用於此操作,基本上我存儲的計算值就是這樣2020-2322 –

0

我會嘗試從下往上調試問題;您可以通過在某種SQL管理工具中查詢存儲過程是否花費太多時間來檢查它。

如果是這樣的話,我的第一項決議是優化數據庫,檢查你的索引等

0

如果你的目標是要承認,如果有對PARTNO數據,那麼我建議您修改查詢:

STORED PROCEDURE 
CREATE PROCEDURE PartNo_Check 
@PartNo VARCHAR(30) 

AS 

SELECT Top 1 PartNo from T_Product where [email protected] 

,那麼你將不得不

count = checkCommand.ExecuteReader 
If count.HasRow then valid=true 

這是你的問題,然後,但如果你想操作相關的任何數據,這不會是股份公司ood解決方案。

希望這可以像你想的那樣快!

1

重要的是要明確你的代碼應該做什麼 - 看起來像你試圖確定是否存在某些東西,而不是它的數量或其他屬性。爲實現這一目標,我會修改你的存儲過程如下:

STORED PROCEDURE 
CREATE PROCEDURE PartNo_Check 
@PartNo VARCHAR(30) 

AS 

SET NOCOUNT ON; 

SELECT CASE WHEN EXISTS (SELECT PartNo 
          FROM  T_Product 
          where [email protected]) 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 
相關問題