亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在實體框架中使用表值和標量參數調用存儲過程

如何在實體框架中使用表值和標量參數調用存儲過程

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 關注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號