我正在尝试从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很新)
谢谢
答案 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
类型中以使事情变得更容易,尽管它意味着更多的样板代码。