如何使用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。请尝试使用少量工具