为什么输出参数在插入后从标识列返回空值?
我尝试了各种测试,返回输出参数始终为空
这是C#代码:
using System.Data.SqlClient;
SqlConnection conn = new SqlConnection
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "TestSerPsp @ValColp, @RetKeyp";
cmd.Parameters.Add("@RetKeyp", SqlDbType.Int);
cmd.Parameters["@RetKeyp"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@ValColp", SqlDbType.NChar);
cmd.Parameters["@ValColp"].Value = "QQ";
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
string x = cmd.Parameters["@RetKeyp"].Value.ToString();
这是SQL服务器存储过程:
ALTER PROCEDURE [dbo].[TestSerPsp]
@ValColp nvarchar(5),
@RetKeyp int OUTPUT
AS
BEGIN
SET NOCOUNT ON
*** Test 1- This uses the scope identity function
Insert into TestSP (ValCol) Values (@ValColp); SELECT @RetKeyp = SCOPE_IDENTITY()
*** Test 2- This uses the @@ identity function
Insert into TestSP (ValCol) Values (@ValColp)
SET @RetKeyp = @@Identity
这是表DDL:
CREATE TABLE [dbo].[TestSP](
[KeyCol] [int] IDENTITY(1,1) NOT NULL,
[ValCol] [nchar](10) NULL,
CONSTRAINT [PK_TestSP] PRIMARY KEY CLUSTERED
(
[KeyCol] ASC
) WITH (PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
END
答案 0 :(得分:0)
您是否尝试过使用CommandType.StoredProcedure的CommandType?
对于命令文本,使用过程的名称,然后分配参数并运行它。
我不确定CommandType.Text是否支持OUTPUT参数。
答案 1 :(得分:0)
大多数人在处理SqlConnection对象时都使用“using”语句。
此处示例:
http://www.dotnetperls.com/sqlconnection
我会在关闭连接之前得到该值。
string x = cmd.Parameters["@RetKeyp"].Value.ToString();
conn.Close();
但是,请再看一下“使用”语法。