如何向SQL Server传入空值?优化重复数据库插入代码
优化重复SQL插入代码的方案
原代码因判断Profilefoto是否为空,编写了两段高度重复的插入逻辑,既增加维护成本,也存在冗余。可以通过以下方式优化:
核心优化思路
- 统一使用包含
profilephoto字段的SQL插入语句,利用数据库允许该字段为空的特性,当Profilefoto为空时传入DBNull.Value即可 - 提取重复的参数添加逻辑,减少代码冗余
- 避免重复创建
SqlCommand对象,提升代码简洁性
优化后的代码
public int InsertInDb() { using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); // 统一使用包含profilephoto字段的插入语句,参数采用有意义的命名 SqlCommand comm = new SqlCommand(@"INSERT INTO Person (firstname, lastname, login, password, profilephoto, regdate, isadmin) OUTPUT INSERTED.ID VALUES (@firstname, @lastname, @login, @password, @profilephoto, @regdate, @isadmin)", conn); // 添加所有通用参数 comm.Parameters.AddWithValue("@firstname", Firstname); comm.Parameters.AddWithValue("@lastname", Lastname); comm.Parameters.AddWithValue("@login", Login); comm.Parameters.AddWithValue("@password", Wachtwoord); comm.Parameters.AddWithValue("@regdate", RegDate); comm.Parameters.AddWithValue("@isadmin", IsAdmin); // 单独处理profilephoto参数 comm.Parameters.AddWithValue("@profilephoto", Profilefoto != null ? Utils.ImageToString(Profilefoto) : DBNull.Value); Id = (int)comm.ExecuteScalar(); return Id; } }
额外优化建议
- 替换
AddWithValue为指定SQL数据类型的Add方法,避免潜在的类型转换和性能问题,示例:// 假设firstname是最大长度50的nvarchar类型 comm.Parameters.Add("@firstname", SqlDbType.NVarChar, 50).Value = Firstname; - 可以将SQL语句抽为常量,方便统一管理和修改
内容的提问来源于stack exchange,提问作者Jorne
相关产品推荐
相关产品推荐

