如何使用c#从sql中获取自动生成的值?

如何使用c#从sql中获取自动生成的值?,sql,c#-4.0,Sql,C# 4.0,我有一个如下所示的存储过程 CREATE PROCEDURE [dbo].[spMYSPDetails] @Id VarChar(6), @Name VarChar(50), @Limit Money, @Status VarChar(1), @Accounts As SmallInt AS BEGIN IF(LEN(ISNULL(@strDebtorId, '')) = 0) BEGIN WHI

我有一个如下所示的存储过程

        CREATE PROCEDURE [dbo].[spMYSPDetails]    
 @Id VarChar(6),    
 @Name VarChar(50),    
 @Limit Money,    
 @Status VarChar(1),    
 @Accounts As SmallInt    
AS BEGIN    

 IF(LEN(ISNULL(@strDebtorId, '')) = 0) BEGIN    

  WHILE 0 = 0 BEGIN    

   SET @Id = '9' + dbo.fnGenerateRandomCode(5, '0123456789')    

   IF NOT EXISTS (SELECT 1 FROM mytbl WITH (NOLOCK) WHERE s_Id = @Id) BEGIN    

    INSERT INTO Mytbl     
     (D_Id,    
     D_Name,    
     D_Limit,    
     D_Status,    
     D_Accounts,    
     D_dtmStamp,    
     D_Balance)    
    VALUES    
     (@Id,     
     @Name,    
     @Limit,    
     @Status,    
     @Accounts,    
     GETDATE(),    
     @Limit)    

     BREAK   

   END   
我有c#夏普代码可以这样称呼这个SP

try
            {
                string Id = "";
                if (hdDId.Value.ToString() != "")
                {
                    Id = hdDId.Value.ToString();
                }

                objDB.blnParamClear();
                objDB.blnParamAdd(ParameterDirection.Input, "@Id", SqlDbType.VarChar, 6, Id.ToString());
                objDB.blnParamAdd(ParameterDirection.Input, "@Name", SqlDbType.VarChar, 50, txtName.Value.ToString());
                objDB.blnParamAdd(ParameterDirection.Input, "@Limit", SqlDbType.Money, 8, decimal.Parse(txtLimit.Value.ToString()));
                objDB.blnParamAdd(ParameterDirection.Input, "@Status", SqlDbType.VarChar, 1, cboStatus.Value);
                objDB.blnParamAdd(ParameterDirection.Input, "@intMaxAccounts", SqlDbType.SmallInt, 4, txtAccnts.Value.ToString());

                blnResult = (objDB.lngExecuteSP("spMYSPDetails") == 0);

  }

现在我想在C#中捕获自动生成的(随机)ID以供参考。我试过了,但没能赶上。。是否有任何方法可以捕获由SQL中的SP生成的相同id。请给我一些建议…

除了输入参数之外,存储过程还可以有返回值和输出参数

使用

定义参数“@Id”时,将
ParameterDirection.Input
更改为
ParameterDirection.Output


另外,如果Id是在数据库中生成的,那么您现在将向存储过程(
Id.ToString()
)传递什么?为什么不直接使用自动增量列?

除了输入参数外,存储过程还可以有返回值和输出参数

使用

定义参数“@Id”时,将
ParameterDirection.Input
更改为
ParameterDirection.Output


另外,如果Id是在数据库中生成的,那么您现在将向存储过程(
Id.ToString()
)传递什么?为什么不直接使用自动增量列?

使用@ID作为输出变量

@Id VarChar(6)输出

然后设置C#参数

SqlParameter paramOutput=新的SqlParameter(“@Output”,SqlDbType.nVarChar);
paramOutput.Direction=ParameterDirection.Output

使用@ID作为输出变量

@Id VarChar(6)输出

然后设置C#参数

SqlParameter paramOutput=新的SqlParameter(“@Output”,SqlDbType.nVarChar);
paramOutput.Direction=ParameterDirection.Output

“抓住”?尝试使用
objDB.blnParamAdd(ParameterDirection.InputOutput,“@Id”…)
,尽管您的过程以非常非常错误的方式生成Id。请尝试使用小实现“Catch”?尝试使用
objDB.blnParamAdd(ParameterDirection.InputOutput,“@Id”…)
,尽管您的过程以一种非常非常错误的方式生成Id。请尝试使用少量工具