C#MVC数据类型传递给存储过程输出参数

时间:2014-09-04 13:45:37

标签: c# .net sql-server asp.net-mvc stored-procedures

我正在尝试从C#MVC控制器调用SQL Server存储过程。存储过程的参数如下:

ALTER procedure [dbo].[spVehicleSearch360]
    @strLocale          nvarchar(10),
    @xmlSearchCriteria  xml,
    @strSortBy          nvarchar(30),
    @strSortDir         nvarchar(5),
    @uidSessionId       uniqueidentifier,
    @iPage                int = 1,
    @iPageSize          int = 10,
    @iCount               int output,
    @iTotalCount        int output,
    @bShowResults       bit = 1,
    @xmlResults         xml = null output,
    @dtLastItemModified datetime = null output,
    @uidVehicleInList uniqueidentifier = null
as
begin 
.........
.........
.........

当我从我的控制器那里打电话时:

var search_results = db.spVehicleSearch(strLocale, xmlSearchCriteria, strSortBy, strSortDir, uidSessionId, iPage, iPageSize, iCount, iTotalCount, bShowResults, xmlResults, dtLastItemModified, uidVehicleInList);

我收到存储过程的输出参数(参数8,9,11,12)

的以下错误
  

Arugment [n]:无法从[int / string / system.DateTime]转换为   'System.Data.Objects.ObjectParameter'

我应该为这些论点传递什么?

(道歉,如果这是一个非常基本的问题,我对.net很新)

谢谢

1 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是在该类的实例中包装声明为ObjectParameter的参数,如下所示:

var iCountParam = new ObjectParameter("iCount", typeof(int));
var iTotalCountParam = new ObjectParameter("iTotalCount", typeof(int));
var xmlResultsParam = new ObjectParameter("xmlResults", typeof(string));
var dtLastItemModifiedParam = new ObjectParameter("dtLastItemModified", typeof(DateTime));

var search_results = db.spVehicleSearch(strLocale, xmlSearchCriteria, strSortBy, strSortDir, uidSessionId, iPage, iPageSize, iCountParam, iTotalCountParam, bShowResults, xmlResultsParam, dtLastItemModifiedParam, uidVehicleInList);
//using your previously declared variables...
iCount = (int)iCountParam.Value;
iTotalCount = (int)iTotalCountParam.Value;
//since these are nullable params, gotta check before casting
//you can obviously use whatever you want for the value if it is indeed null
xmlResults = Convert.IsDBNull(xmlResultsParam.Value) ? null : (string)xmlResultsParam.Value;
dtLastItemModified = Convert.IsDBNull(dtLastItemModifiedParam.Value) ? DateTime.MinValue : (DateTime)dtLastItemModifiedParam.Value;

实体框架以这种方式处理输出参数很困难,并将它们包装在通用ObjectParameter类型中以使事情变得更容易,尽管它意味着更多的样板代码。