你能以某种方式重载方法中的查询吗?
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;
}
所以有一个 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;
}