为了账号安全,请及时绑定邮箱和手机立即绑定

如何在实体框架中使用表值和标量参数调用存储过程

如何在实体框架中使用表值和标量参数调用存储过程

C#
倚天杖 2023-09-24 16:20:58
我正在尝试调用具有两个参数的存储过程:ID :int数据 :table user defined type我想使用实体框架调用这个存储过程。请帮我。
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

请检查以下代码:


public DataTable CallStoredProcedure(System.String procedureName, Dictionary<string, object> parameters)

        {

            var cmd = CreateStoredProcCallCommand(procedureName, true);

            for (int i = 0; i < parameters.Count; i++)

            {

                var param = parameters.ElementAt(i);

                if (param.Value.GetType() == typeof(DataTable))

                    AddTableValuedParameter(cmd, "@" + param.Key, 0, ParameterDirection.Input, param.Value);

                else

                    AddParameter(cmd, "@" + param.Key, 2147483647, ParameterDirection.Input, param.Value);

            }


            var toReturn = new DataTable();

            CreateAndSetupAdapter(cmd).Fill(toReturn);

            return toReturn;

        }

private DbCommand CreateStoredProcCallCommand(string storedProcedureToCall, bool openConnection)

        {

            var cmd = _factoryToUse.CreateCommand();

            cmd.CommandType = CommandType.StoredProcedure;

            cmd.CommandText = storedProcedureToCall;

            return SetupCommand(cmd, openConnection);

        }

private DbDataAdapter CreateAndSetupAdapter(DbCommand selectCommand)

{

    var adapter = _factoryToUse.CreateDataAdapter();

    adapter.SelectCommand = selectCommand;

    return adapter;

}


 private static void AddTableValuedParameter(DbCommand cmd, string parameterName, int length, ParameterDirection direction, object value)

        {

            SqlParameter param = new SqlParameter();

            param.ParameterName = parameterName;

            param.SqlDbType = SqlDbType.Structured;

            param.Size = length;

            param.Value = value;

            param.Direction = direction;

            cmd.Parameters.Add(param);

        }

private static void AddParameter(DbCommand cmd, string parameterName, int length, ParameterDirection direction, object value)

        {

            var dummyParam = new EntityParameter() { Value = value };

            var parameter = cmd.CreateParameter();

            parameter.ParameterName = parameterName;

            parameter.Direction = direction;

            parameter.Size = length;

            parameter.Value = value;

            parameter.DbType = dummyParam.DbType;

            cmd.Parameters.Add(parameter);

        }


查看完整回答
反对 回复 2023-09-24
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信