2013-06-26 86 views
0

我試圖在「實時」中獲取受影響的行的ID。我可以檢查它使用的參數或最後一行,但我希望儘可能以最少的延遲執行操作,以免表中有多個用戶混合信息。SQL/C#獲取受插入影響的行的ID

到目前爲止已經試過:

public int setFileInfo(string fileName, int filePrivacy, string filePassword, string fileDesc, string fileOwner) 
{ 
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["bitRain"].ConnectionString)) 
    { 
     SqlCommand cmd = new SqlCommand("dbo.Upload", conn); 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 

     if(!String.IsNullOrEmpty(filePassword)) 
     { 
      filePassword = FormsAuthentication.HashPasswordForStoringInConfigFile(filePassword, "MD5"); 
     } 

     try 
     { 
      conn.Open(); 

      cmd.Parameters.Add("@fileName", fileName); 
      cmd.Parameters.Add("@filePrivacy", filePrivacy); 
      cmd.Parameters.Add("@filePassword", filePassword); 
      cmd.Parameters.Add("@fileDescription", fileDesc); 
      cmd.Parameters.Add("@fileOwner", fileOwner); 

      int fileID = (int)cmd.ExecuteScalar(); 
      return fileID; 
     } 
     catch (Exception ex) 
     { } 
     finally 
     { 
      conn.Close(); 
     } 

     return -1; 
    } 
} 

存儲過程:

CREATE PROCEDURE [dbo].[Upload] 
@fileName nvarchar(20), 
@filePrivacy int, 
@filePassword nvarchar(50), 
@fileDescription nvarchar(200), 
@fileOwner nvarchar(14) 

AS 
INSERT INTO Files ([FileName], FilePrivacy, FilePassword, FileDescription, FileOwner) 
VALUES (@fileName, @filePrivacy, @filePassword, @fileDescription, @fileOwner) 
RETURN 0 

我需要一些OUTPUT參數,但我不知道如何使用它和MSDN的例子是不夠明確的我。

+0

你正在尋找的答案是正確的這個網頁上檢查的第一個鏈接的'相關「部分 – MethodMan

+0

[C#調用帶有返回值的SQL Server存儲過程]的可能重複(http://stackoverflow.com/questions/6210027/c-sharp-calling-sql-server -stored-procedure-with-return-value)和[SQL Server存儲過程從剛剛插入的行獲取值](http://stackoverflow.com/q/16868986/62576),這兩個都從'Related'列表到右邊(列表底部有三分之一)。請至少在網站上搜索現有答案,並查看您輸入時出現的可能相關問題列表,以查看問題是否已在此處提出並回答。謝謝。 –

+0

@KenWhite我做了搜索,我只是沒有找到它與我的代碼相似的方式,因爲我會使用它,並以與以前相同的知識出來。也許我沒有正確閱讀它們。似是而非。 –

回答

7

存儲過程:

CREATE PROCEDURE [dbo].[Upload] 
@fileName nvarchar(20), 
@filePrivacy int, 
@filePassword nvarchar(50), 
@fileDescription nvarchar(200), 
@fileOwner nvarchar(14), 
@id int out 

AS 
INSERT INTO Files ([FileName], FilePrivacy, FilePassword, FileDescription, FileOwner) 
VALUES (@fileName, @filePrivacy, @filePassword, @fileDescription, @fileOwner) 
set @id = SCOPE_IDENTITY() 
END 

在CS中添加

cmd.Parameters["@id"].Direction = ParameterDirection.Output; 
相關問題