使用Repository Pattern在asp.net中为整个项目制作通用插入数据功能的可能方法

时间:2019-05-30 11:29:00

标签: c# asp.net asp.net-mvc

我想知道如何避免为所有页面一次又一次地编写cmd.Parameter.addwithvalue。总之,像是通用插入函数。我没有使用实体框架,因此添加实体的常规通用功能将无济于事。

到目前为止,我已经尝试过:

public string AddCampus(Campus objCampus)
    {
                //string Params = "@Activity,@Name,@PhoneNo,@Email,@Logo,@StatusId,@CountryId,@CityId,@StateId,@DistrictId,@ClientId,@Pincode,@AddressLine1,@AddressLine2,@Area,@Street";
                //string Values = "Add" + ',' + objCampus.Name + ',' + objCampus.PhoneNo + ',' + objCampus.Email + ',' + objCampus.Logo + "," + objCampus.StatusId + ","+objCampus.CampusAddress.CountryId + "," + objCampus.CampusAddress.CityId + "," + objCampus.CampusAddress.StateId + "," + objCampus.CampusAddress.DistrictId + "," + objCampus.ClientId + "," + objCampus.CampusAddress.Pincode + "," + objCampus.CampusAddress.AddressLine1 + "," + objCampus.CampusAddress.AddressLine2 + "," + objCampus.CampusAddress.Area + "," + objCampus.CampusAddress.Streat;
                //return  Connection.CommandExecuteNonQuery(Params, Values,true, "sprCampus");
    }

我做到了,它奏效了,但我刚刚说过。这就是实现方式:

   public static string CommandExecuteNonQuery(string Parameters,string Values,bool IsStoredProcedure,string command)
    {   string[] Parameter = Parameters.Split(',');
        string[] Value = Values.Split(',');
        string s_Message = "";
        if (Parameter.Count() < Value.Count())
        {
            s_Message = "Number of Paramters Supplied is less than Number of Values Supplied.";
            return s_Message;
        }
        else if (Parameter.Count() > Value.Count())
        {
            s_Message = "Number of Values Supplied is less than Number of Parameters Supplied.";
            return s_Message;
        }
        else
        {
            SqlCommand cmd = new SqlCommand();
            for (var i = 0; i < Parameter.Count(); i++)
            {
                cmd.Parameters.AddWithValue(Parameter[i], Value[i]);

            }
            cmd.CommandText = command;
            if (IsStoredProcedure)
                cmd.CommandType = CommandType.StoredProcedure;
            string saveSuccess = string.Empty;
            int execute = 0;
            using (SqlConnection con = new SqlConnection(sqlConStr))
            {
                try
                {
                    con.Open();
                    cmd.Connection = con;
                    execute = cmd.ExecuteNonQuery();
                    if (execute > 0)
                    {
                        s_Message = "Record Saved";
                    }
                    else
                        s_Message = "Operation Failed";



                }
                catch (Exception excp)
                {
                    s_Message = excp.Message;
                }

            }
        }
            return s_Message.ToString();







    }

所以我只是在寻找比这更好的解决方案。

1 个答案:

答案 0 :(得分:1)

前段时间我有相同的想法。以下内容可能不是最优化的解决方案,但是我认为它非常不错。

    // Parameter used for StoredProcedure
    private class Parameter
    {
        public Parameter(string name, object value)
        {
            Name = name;
            Value = value;
        }

        public readonly string Name;
        public readonly object Value;
    }

    // Executes a given stored procedure with parameters and returns a SQLDataReader
    private static SqlDataReader ExecuteDataReader(string name, SqlConnection dbConnection, List<Parameter> parameters = null)
    {
        if (parameters == null)
            parameters = new List<Parameter>();

        using (var command = new SqlCommand(name, dbConnection) { CommandType = CommandType.StoredProcedure })
        {
            foreach (var parameter in parameters)
                command.Parameters.AddWithValue(parameter.Name, parameter.Value);

            return command.ExecuteReader();
        }
    }

    // Executes a given stored procedure with parameters
    private static void ExecuteNonQuery(string name, SqlConnection dbConnection, List<Parameter> parameters = null)
    {
        if (parameters == null)
            parameters = new List<Parameter>();

        using (var command = new SqlCommand(name, dbConnection) { CommandType = CommandType.StoredProcedure })
        {
            foreach (var parameter in parameters)
                command.Parameters.AddWithValue(parameter.Name, parameter.Value);

            command.ExecuteNonQuery();
        }
    }