sqlserver输出参数为空

时间:2013-07-29 18:07:19

标签: c# sql-server stored-procedures output-parameter

为什么输出参数在插入后从标识列返回空值?

我尝试了各种测试,返回输出参数始终为空

这是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

2 个答案:

答案 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();

但是,请再看一下“使用”语法。