So there’s a Customer
and a Seller
and they’re both User
. The only difference between them is that seller has a NameOfBusiness
and customer does not.
In the DAL I have this code:
x
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();
}
}
}
Is there a way to overload the query OR change the query so that you can fill in a NULL for NameOfBusiness
?
Advertisement
Answer
Option A Do almost nothing
Rename CreateSeller
to Create
and use it as it is. Name of business is likely empty for customers already.
Option B Do just a little bit
Create
could take in a bool
parameter and clear name of business.
public void Create(UserDTO u, bool isSeller )
{
cmd.Parameters.Add("@NameOfBusiness", System.Data.SqlDbType.NVarChar).Value =
isSeller ? u.NameOfBusiness : null;
Option C. Craft
Create
could take in a bool
parameter and modify the query and the Parameters
accordingly. Something like the following.
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;
}