Al conseguir un valor devuelto de un procedimiento almacenado, que sólo devuelve el primer carácter,El valor de retorno de un procedimiento almacenado obtiene el primer personaje sólo en ASP.NET
Exec sp_Auto_Gen_TTBDBatNo 'TT', ''
en SQL servidor obtiene toda la cadena, pero en ASP.NET obtiene el primer personaje.
¿Cómo obtengo el valor de la cadena completa?
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ódigo 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;
}
}
50 es un poco exagerado, si en el procedimiento almacenado define la longitud como 8. –