2014-02-18 36 views
3

我有以下SQL存儲過程調用採用精緻小巧

GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[GetNextNumberTest] 
@NEWNUMBER varchar(100) OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SET @NEWNUMBER = 'ABC00001' 
    RETURN 1 
END 

我試圖用短小精悍的讀取NENUMBER值SQL存儲過程,這裏是我的代碼

private string GetNextNumber() 
{ 
    var dynamicParams = new DynamicParameters(); 
    dynamicParams.Add("rval", DbType.Int32, direction: ParameterDirection.ReturnValue); 
    dynamicParams.Add("NEWNUMBER", DbType.String, direction: ParameterDirection.Output); 
    var data = db.QueryMultiple("GetNextNumberTest", dynamicParams, commandType: CommandType.StoredProcedure); 
    var result = dynamicParams.Get<string>("NEWNUMBER"); 
    return result; 
} 

但我總是得到以下錯誤

An exception of type 'System.Data.SqlClient.SqlException' occurred in Dapper.dll but was not handled in user code 

Additional information: Error converting data type varchar to int. 

任何幫助,非常感謝。

回答

1

多使用錯誤:

  1. 傳遞DbType.Int32/DbType.String而不是數據類型
  2. ,如果你不傳遞一個字符串值,它需要提示的長度
  3. 您應該使用Execute而不是QueryMultiple這裏
  4. 使用返回Execute給我存儲過程的返回值(這根本不是ADO.NET的工作原理;返回值存在理論上受影響的行,但它通常是沒有意義的數字)

所以:

dynamicParams.Add("rval", dbType: DbType.Int32, 
    direction: ParameterDirection.ReturnValue); 
dynamicParams.Add("NEWNUMBER", dbType: DbType.String, 
    direction: ParameterDirection.Output, size: 100); 
db.Execute("GetNextNumberTest", dynamicParams, 
    commandType: CommandType.StoredProcedure); 
var rval = dynamicParams.Get<int>("rval"); 
var result = dynamicParams.Get<string>("NEWNUMBER"); 
+0

非常感謝你。非常感謝你的幫助。 –

相關問題