存储过程使用可选参数MVC4

时间:2014-08-12 10:38:19

标签: sql-server-2008 asp.net-mvc-4

我有一个带有一些可选参数的存储过程.....我传递一个类型参数,并根据我调用相应的查询。 以下是我的查询

create procedure [dbo].[usp_InsertInfo]
@login_id varchar(500)=null,
@login_name varchar(200)=null,
@handler_name varchar(500)=null,
@city varchar(100)=null,
@email varchar(500)=null,
@img_url_http varchar(max)=null,
@img_url_https varchar(max)=null,
@token varchar(500)=null,
@login_type varchar(2)=null
as
begin
if(@login_type='F')
//code goes here
else
//code goes here
end

以下是我从控制器调用它的方式

using (Entities dbContext = new Entities())
                    {

                        var parameters = new SqlParameter[7];
                        parameters[0] = new SqlParameter { ParameterName = "login_id", Value = objUser.Id };
                        parameters[1] = new SqlParameter { ParameterName = "login_name", Value = objUser.Name };
                        parameters[2] = new SqlParameter { ParameterName = "handler_name", Value = objUser.ScreenName };
                        parameters[3] = new SqlParameter { ParameterName = "img_url_http", Value = objUser.ProfileImageUrl };
                        parameters[4] = new SqlParameter { ParameterName = "img_url_https", Value = objUser.ProfileImageUrlHttps };
                        parameters[5] = new SqlParameter { ParameterName = "token", Value = accessToken.Token };
                        parameters[6] = new SqlParameter { ParameterName = "login_type", Value = "T" };
                        List<userInfo> objUserInfo = dbContext.ExecuteStoreQuery<userInfo>("usp_InsertInfo @login_id,@login_name,@handler_name,@img_url_http,@img_url_https,@token,@login_type", parameters).ToList();
                    }

但是当我检查数据库中的值时,值会搞砸......

在img_url_http中,我得到了令牌值img_url_https我得到了类型值,依此类推。

M混淆了我出错的地方或者MVC4不支持空参数。 或者请帮助我使用可选参数

通过MVC4调用存储过程的正确方法

我想使用可选参数运行此代码并执行存储过程并根据条件返回结果。

1 个答案:

答案 0 :(得分:0)

    static void CallAProcedure(int required, int? optional)
{
    string connectionstring = "connection string here.";

    using (SqlConnection cn = new SqlConnection(connectionstring))
    {
        cn.Open();
        using (SqlCommand cm = cn.CreateCommand())
        {
            cm.CommandText = "AProcedure";
            cm.CommandType = CommandType.StoredProcedure;

            cm.Parameters.AddWithValue("@Required", 1);

            if (optional.HasValue)
                cm.Parameters.AddWithValue("@Optional", optional.Value);

            cm.ExecuteNonQuery();
        }

    }
}