2014-05-02 66 views
1

我有使用存儲過程的代碼,但是我得到了標題中指出的錯誤。我經歷了類似的帖子,但我沒有得到解決。我確定參數的數量與存儲過程中的相同。過程或函數指定的參數太多

@stype as varchar, 
    @surl as varchar(500), 
    @status as bigint, 
    @pk_photo_id as bigint, 
    @bactive as bigint, 
    @property_id as varchar(30), 
    @client_id as bigint 
.... rest of code 
if (@stype = 'L') 
     BEGIN 
      update ET_PROPERTY_PHOTO set [email protected], [email protected] where [email protected]_photo_id 
      if (@bactive=1) 
      BEGIN 
       update ET_PROPERTY set [email protected] where ([email protected]_id) and (@client_id = fkl_XML_Client_ID) 
      END 
....rest of code 

我的VB代碼:

Dim cmdSet As New SqlCommand("ETSP_UPDATE_PHOTO_URLS") 
    cmdSet.CommandType = CommandType.StoredProcedure 
    cmdSet.Parameters.AddWithValue("@stype", "L") 

    Try 

     Dim utility As New TransferUtility(AWSAccessKey, AWSSecretKey, RegionEndpoint.EUWest1) 

     Dim S3_KEY As String = sKey 
     Dim txtFolderPath As String = "C:\\images\\" 
     Dim bucket As String = ConfigurationSettings.AppSettings("bucket") 

     Dim files As String() = Directory.GetFiles(txtFolderPath) 

     For Each images As String In files 
      Dim id As String = "" 
      For Each str As String In IDS 

       If Path.GetFileNameWithoutExtension(sKey).Contains(str) Then 
        id = str 

       End If 
      Next 

      utility.Upload(txtFolderPath & sKey, bucket) 
      Dim cannedACL As S3CannedACL = S3CannedACL.PublicRead 


      Dim fileNameOnly As String = Path.GetFileNameWithoutExtension(sKey) 
      Dim token As String = fileNameOnly.Remove(fileNameOnly.LastIndexOf("_"c)) 
      Dim number As New String(token.SkipWhile(AddressOf [Char].IsLetter).ToArray()) 

      cmdSet.Parameters.AddWithValue("@surl", Convert.ToString("URL" & sKey)) 
      cmdSet.Parameters.AddWithValue("@status", 2) 
      cmdSet.Parameters.AddWithValue("@pk_photo_id", number) 
      cmdSet.Parameters.AddWithValue("@bactive", 1) 
      cmdSet.Parameters.AddWithValue("@property_id", id) 
      cmdSet.Parameters.AddWithValue("@client_id", clientIDs) 
    ....code 

任何建議或修正? 我不介意C#的幫助。

+1

其中線錯誤發生的算? – HackerMan

+2

難道是因爲在循環中添加參數? – DaveParsons

+0

@HackerMan我不知道,但是當它想要執行我假設的代碼時,我有一個日誌,它只在executeNonQuery出現,我無法調試,長篇故事。 – user3588641

回答

1

您正在將參數添加到每個圖像的命令中,但是您沒有爲每個圖像使用新的SqlCommand。所以當你的循環開始在第一個圖像上工作時,SqlCommand中有1個參數。然後添加6個參數(surl和co)並調用該命令。它有7個參數,一切都很好。

然後,對於第二張圖像,您可以在前7張圖片上再次添加6個參數到SqlCommand。哎呀。

你應該做的是實例中的SqlCommand for循環,纔能有正確的參數在每次調用

Try 

    Dim utility As New TransferUtility(AWSAccessKey, AWSSecretKey, RegionEndpoint.EUWest1) 

    Dim S3_KEY As String = sKey 
    Dim txtFolderPath As String = "C:\\images\\" 
    Dim bucket As String = ConfigurationSettings.AppSettings("bucket") 

    Dim files As String() = Directory.GetFiles(txtFolderPath) 

    For Each images As String In files 
     Dim id As String = "" 
     For Each str As String In IDS 

      If Path.GetFileNameWithoutExtension(sKey).Contains(str) Then 
       id = str 

      End If 
     Next 

     utility.Upload(txtFolderPath & sKey, bucket) 
     Dim cannedACL As S3CannedACL = S3CannedACL.PublicRead 


     Dim fileNameOnly As String = Path.GetFileNameWithoutExtension(sKey) 
     Dim token As String = fileNameOnly.Remove(fileNameOnly.LastIndexOf("_"c)) 
     Dim number As New String(token.SkipWhile(AddressOf [Char].IsLetter).ToArray()) 

     Dim cmdSet As New SqlCommand("ETSP_UPDATE_PHOTO_URLS") 
     cmdSet.CommandType = CommandType.StoredProcedure 
     cmdSet.Parameters.AddWithValue("@stype", "L") 
     cmdSet.Parameters.AddWithValue("@surl", Convert.ToString("URL" & sKey)) 
     cmdSet.Parameters.AddWithValue("@status", 2) 
     cmdSet.Parameters.AddWithValue("@pk_photo_id", number) 
     cmdSet.Parameters.AddWithValue("@bactive", 1) 
     cmdSet.Parameters.AddWithValue("@property_id", id) 
     cmdSet.Parameters.AddWithValue("@client_id", clientIDs) 
....code 
相關問題