c# - 存储过程的返回值仅在 ASP.NET 中获取第一个字符

标签 c# asp.net .net sql-server ado.net

从存储过程中获取返回值时,它只返回第一个字符,

Exec sp_Auto_Gen_TTBDBatNo 'TT', '' 在 SQL Server 中获取整个字符串,但在 ASP.NET 中它获取第一个字符。

如何获取整个字符串值?

CREATE PROC sp_Auto_Gen_TTBDBatNo
      @Prefix nvarchar(2),
      @Result nvarchar(8) output
AS
BEGIN
    DECLARE @LastValue int


    -- CompanyCode = @CompanyCode AND BankCode = @BankCode AND AccountCode = @AccountCode

    SET NOCOUNT ON
    If @Prefix = 'BD'
        SELECT @LastValue = MAX(RIGHT(RTRIM(ISNULL(BatchNo, '')),2)) from dbo.Cheque_IssueRecord_Secretary_Review_BD WHERE ISNUMERIC(RIGHT(RTRIM(BatchNo),2))= 1 AND LEN(RIGHT(RTRIM(BatchNo),2)) = 2
    ELSE
        SELECT @LastValue = MAX(RIGHT(RTRIM(ISNULL(BatchNo, '')),2)) from dbo.Cheque_IssueRecord_Secretary_Review_TT WHERE ISNUMERIC(RIGHT(RTRIM(BatchNo),2))= 1 AND LEN(RIGHT(RTRIM(BatchNo),2)) = 2

    SET NOCOUNT OFF
    set @Result = @Prefix + RIGHT(RTRIM(STR(year(getdate()))),2)+RIGHT('0'+LTRIM(RTRIM(STR(month(getdate())))),2) + RIGHT('0'+LTRIM(RTRIM(STR(ISNULL(@LastValue,0)+1))),2)

    print @Result
END

C#代码:

string tAuto_Batch = "";

SqlTransaction trans = null;
using (SqlConnection connection = new SqlConnection(_connectionString))
{
    try
    {
        SqlCommand command = new SqlCommand("sp_Auto_Gen_TTBDBatNo", connection);
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.Add(new SqlParameter("@Prefix", "TT"));
        //command.Parameters.Add(new SqlParameter("@CompanyCode", cheque.Voucherbatchno));
        //command.Parameters.Add(new SqlParameter("@BankCode", cheque.Voucherno));
        //command.Parameters.Add(new SqlParameter("@AccountCode", cheque.Voucherno));

        SqlParameter ResultValue = new SqlParameter("@Result", tAuto_Batch);
        ResultValue.Direction = ParameterDirection.Output;

        command.Parameters.Add(ResultValue);

        connection.Open();
        trans = connection.BeginTransaction();
        command.Transaction = trans;
        command.Connection = connection;

        command.ExecuteNonQuery();
        trans.Commit();

        tAuto_Batch = command.Parameters["@Result"].Value.ToString();

        command.Dispose();
        trans.Dispose();
        connection.Close();

    }
    catch (Exception ex)
    {
        connection.Close();
        Error_Label.Text = Error_Label.Text + "sp_Auto_Gen_TTBDBatNo error " + ex.Message;
    }
}

最佳答案

确保你真的像这样使用它:

@Result NVARCHAR(8) OUTPUT
SqlParameter resultValue = new SqlParameter("@Result", SqlDbType.NVarChar, 8);

(N)VARCHAR 列的默认长度为 1。

关于c# - 存储过程的返回值仅在 ASP.NET 中获取第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217556/

相关文章:

c# - 当ID为GUID时如何从数据库获取最新行

c# - Common.Logging 配置异常

c# - 无法使用 RestSharp 下载 pdf?

c# - 如何反射(reflect)作为泛型提供的类型的名称?

c# - XMLSerializer : <ImplementationException xmlns ='urn:epcglobal:ale:wsdl:1' > was not expected

C# 4.0 MemoryCache - 如何在对其依赖项进行更改时逐出依赖缓存条目

javascript - RadWindow 未在客户端上打开

c# - 如何使用 C# 将 DateTime 对象转换为仅包含日期的字符串?

c# - 使用 log4net 版本 2.0.3 执行登录数据库

c# - 如何在给定字符串中用 "&nbsp;"替换第二个空格,但不是第一个/最后一个?