你能以某种方式重载方法中的查询吗?

Can you somehow overload the query in a method?

所以有一个 Customer 和一个 Seller,它们都是 User。它们之间的唯一区别是卖家有 NameOfBusiness 而客户没有。

在 DAL 中我有这个代码:

 public void CreateCustomer(UserDTO u)
 {
     using (SqlConnection con = new SqlConnection(connectionString))
     {
         string query = "INSERT INTO [dbo].[User](FirstName, LastName, UserName, Password, HouseNumber, Adress, Zip) " +
             "VALUES(@FirstName, @LastName, @UserName, @Password, @HouseNumber, @Adress, @Zip)";
         using (SqlCommand cmd = new SqlCommand(query, con))
         {
             cmd.Parameters.Add("@FirstName", System.Data.SqlDbType.NVarChar).Value = u.FirstName;
             cmd.Parameters.Add("@LastName", System.Data.SqlDbType.NVarChar).Value = u.LastName;
             cmd.Parameters.Add("@UserName", System.Data.SqlDbType.NVarChar).Value = u.UserName;
             cmd.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar).Value = u.Password;
             cmd.Parameters.Add("@HouseNumber", System.Data.SqlDbType.Int).Value = u.Housenumber;
             cmd.Parameters.Add("@Adress", System.Data.SqlDbType.NVarChar).Value = u.Adress;
             cmd.Parameters.Add("@Zip", System.Data.SqlDbType.NVarChar).Value = u.Zip;

             cmd.ExecuteNonQuery();
         }
     }
 }


public void CreateSeller(UserDTO u)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        string query = "INSERT INTO [dbo].[User](FirstName, LastName, UserName, Password, HouseNumber, Adress, Zip, NameOfBusiness) " +
            "VALUES(@FirstName, @LastName, @UserName, @Password, @HouseNumber, @Adress, @Zip, @NameOfBusiness)";
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.Add("@FirstName", System.Data.SqlDbType.NVarChar).Value = u.FirstName;
            cmd.Parameters.Add("@LastName", System.Data.SqlDbType.NVarChar).Value = u.LastName;
            cmd.Parameters.Add("@UserName", System.Data.SqlDbType.NVarChar).Value = u.UserName;
            cmd.Parameters.Add("@Password", System.Data.SqlDbType.NVarChar).Value = u.Password;
            cmd.Parameters.Add("@HouseNumber", System.Data.SqlDbType.Int).Value = u.Housenumber;
            cmd.Parameters.Add("@Adress", System.Data.SqlDbType.NVarChar).Value = u.Adress;
            cmd.Parameters.Add("@Zip", System.Data.SqlDbType.NVarChar).Value = u.Zip;
            cmd.Parameters.Add("@NameOfBusiness", System.Data.SqlDbType.NVarChar).Value = u.NameOfBusiness;

            cmd.ExecuteNonQuery();
        }
    }
}

有没有办法重载查询或更改查询,以便您可以为 NameOfBusiness 填写 NULL

选项 A 几乎什么都不做

CreateSeller重命名为Create并按原样使用。对于客户来说,公司名称可能已经是空的。

选项 B 做一点点

Create 可以接受一个 bool 参数和明确的企业名称。

public void Create(UserDTO u, bool isSeller )
{
...
            cmd.Parameters.Add("@NameOfBusiness", System.Data.SqlDbType.NVarChar).Value = 
                   isSeller ? u.NameOfBusiness : null;

选项 C.工艺

Create 可以接收 bool 参数并相应地修改查询和 Parameters。像下面这样的东西。

public void Create(UserDTO u, bool isSeller)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        string query = "INSERT INTO [dbo].[User](FirstName, LastName, UserName, Password, HouseNumber, Adress, Zip" +
            (isSeller ? "NameOfBusiness" : "") +
            ") VALUES(@FirstName, @LastName, @UserName, @Password, @HouseNumber, @Adress, @Zip" +
            (isSeller ? "@NameOfBusiness" : "") +
            ")";
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            // (...)
            cmd.Parameters.Add("@Zip", System.Data.SqlDbType.NVarChar).Value = u.Zip;
            if(isSeller) {
                cmd.Parameters.Add("@NameOfBusiness", System.Data.SqlDbType.NVarChar).Value = u.NameOfBusiness;
            }