简体   繁体   English

有没有办法我可以在C#中重用此代码

[英]Is there a way i can reuse this code in C#

Is there a way i can reuse this codes in executing SQL transaction, i want to make it a method so i can put parameters to execute other stored procedures, can you guys help me to design a good coding structure? 有没有一种方法可以在执行SQL事务时重用此代码,我想使其成为一种方法,以便我可以放置参数来执行其他存储过程,你们可以帮助我设计一个好的编码结构吗?

 try {
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand("InsertUser2Sp", con) {
                    CommandType = CommandType.StoredProcedure
                }) {
                    cmd.Parameters.AddWithValue("@UserID", useridStr);
                    cmd.Parameters.AddWithValue("@Firstname", firstnStr);
                    cmd.Parameters.AddWithValue("@Middlename", middleNstr);
                    cmd.Parameters.AddWithValue("@Lastname", lastnStr);
                    cmd.Parameters.AddWithValue("@UserAge", ageInt);
                    cmd.Parameters.AddWithValue("@HomeAddress", homeaddStr);

                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        } catch (Exception ex) {
            MessageBox.Show("Could not connect to database. Check settings. " + ex.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            MessageBox.Show(ex.Message);
        }
    }

I will share a generic method here . 我将在这里分享一个通用方法。 All you need to do is to build an object with the same property names (including cases) same with the parameters in your SP. 您所需要做的就是用与SP中的参数相同的属性名称(包括大小写)构建对象。

protected internal string GetSingleValue_String(String spname, Object entity)
        {
            Object res = new Object();
            String conString = String.Empty;
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(spname, con);
                cmd.CommandType = CommandType.StoredProcedure;
                if (entity != null)
                {
                    SqlCommandBuilder.DeriveParameters(cmd);
                    PropertyInfo entitymember = default(PropertyInfo);
                    foreach (SqlParameter _param in cmd.Parameters)
                    {
                        if (_param.Direction == ParameterDirection.Input)
                        {
                            entitymember = entity.GetType().GetProperty(_param.ParameterName.Replace("@", ""));
                            var entityValue = entitymember.GetValue(entity, null);
                            String _paramvalue = entityValue != null ? entityValue.ToString() : null; 
                            _param.Value = (string.IsNullOrEmpty(_paramvalue) || _paramvalue == string.Empty ? null : _paramvalue);
                        }
                    }
                }
                res = cmd.ExecuteScalar();
                cmd.Connection.Close();
                entity = null;
                cmd = null;
                if(res==null)
                    res = "";
                else if (String.IsNullOrEmpty(res.ToString()))
                    res = "";
                return res.ToString();
            }
        }

So in your example, create a new class that have the same definition as your SP parameters. 因此,在您的示例中,创建一个与SP参数具有相同定义的新类。

class NewClass()
{
    public string UserID { get; set; }
    public string Firstname { get; set; }
    public string Middlename { get; set; }
    public string Lastname { get; set; }
    public string UserAge { get; set; }
    public string HomeAddress { get; set; }
}

And will call the method like this. 并会这样调用方法。

var newClass = new NewClass
{ 
    UserID = "UserId",
    Firstname = "Firstname",
    Middlename = "Middlename",
    Lastname = "Lastname",
    UserAge = "UserAge",
    HomeAddress = "HomeAddress"
}

var res = GetSingleValue_String("InsertUser2Sp", newClass); 

Don'd mind the return type. 不要介意返回类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM