发布网友 发布时间:2022-04-07 18:08
共4个回答
懂视网 时间:2022-04-07 22:30
在使用SqlCommand 执行存储过程时,如果存储过程需要参数,就必须将每个参数都输进去,虽然说可以使用AddWithValue 方法,但参数多时仍旧有些麻烦。
在需要将类的所有属性作为参数时,可以通过反射获取这个类所有的属性和值,并直接添加到参数中。
不过需要注意的是,必须保证类的属性名和参数名相同(不区分大小写),顺序无所谓。
1 private void SetSqlParameters<T>(SqlCommand cmd, T model) 2 where T : class 3 { 4 foreach (PropertyInfo prop in 5 model.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) 6 { 7 cmd.Parameters.AddWithValue("@" + prop.Name, prop.GetValue(model, null)); 8 } 9 }
可以看出,这个函数中使用了一个循环来遍历所有属性,并使用GetValue 方法来获得相应的值,之后只需用一句话就可以将所有的属性加入参数列表中。
1 public Building FindBuilding(Building building) 2 { 3 using (SqlConnection con = new SqlConnection(AppConnectionString)) 4 { 5 SqlCommand cmd = new SqlCommand("FindBuilding", con); 6 cmd.CommandType = CommandType.StoredProcedure; 7 SetSqlParameters<Building>(cmd, building); 8 9 con.Open(); 10 SqlDataReader reader = cmd.ExecuteReader(); 11 if (reader.Read()) 12 return new Building 13 ( 14 (string)reader["BldgName"], 15 (int)reader["RoomNum"] 16 ); 17 18 return null; 19 } 20 }
【乱写代码坑人系列】小插曲(一)将类的所有属性添加为SqlCommand的参数
标签:
热心网友 时间:2022-04-07 19:38
在查阅代码时,经常会发现一些写的不合理的代码。热心网友 时间:2022-04-07 20:56
这心情大概就像几百个人堆积木。堆得歪歪扭扭,摇摇晃晃,乱七八糟,你千万不能抽里面的积木,指不定抽了一块就塌了。只能看见哪里觉得不牢靠不停的往那边填积木。只要不倒就好了。
每一位接手者在看代码之后,心里都想着重构。但其实重构了几个方法后,放弃的概率可能会越来越大...
还有些情况其实并不是代码垃圾,而是维护这个代码的人一波又一波的换。新上的人在没有完全熟悉这款业务的时候又不敢随便改,等熟悉了以后,又想着跳槽,或者偷懒。除非遇到一个极其负责的人维护,但是这种人很少。
综上,code review很重要,利用好code review 去统一和实践以及监督,相信可以有效提升代码质量。
网页链接
热心网友 时间:2022-04-07 22:30
给你传了本电子书。