gpt4 book ai didi

c# - Windows窗体应用中的三层架构实现

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:39 26 4
gpt4 key购买 nike

我正在尝试使用三层架构将数据插入数据库,但我卡住了,无法继续。

这是我的代码

首先是 UI 部分:

    public void assignField()
{
string maritalCondition = "";
string sex = "";

assignObj.Registered_Date = dateTimePicker1_Date.Value;
assignObj.First_Name = txt_FirstName.Text;

if (comboBox2_MaritalStatus.SelectedIndex == 0)
{
maritalCondition = "Single";
}
else
maritalCondition = "Married";

assignObj.Marital_Status = maritalCondition;

if (RadioButton_Male.Checked == true)
sex = "Male";
else
sex = "Female";
assignObj.Gender = sex;

this.txt_Age.Text = Convert.ToInt32(age).ToString();
}

private void btnRegister_Click(object sender, EventArgs e)
{
assignField();
}

接下来是中间层:

public class CustomerDataType
{
private DateTime registered_Date;
private string first_Name;
private int age;
private string marital_Status;
private string gender;

public DateTime Registered_Date
{
get { return registered_Date; }
set { registered_Date = value; }
}

public string First_Name
{
get { return first_Name; }
set { first_Name = value; }
}

public int Age
{
get { return age; }
set { age = value; }
}

public string Marital_Status
{
get { return marital_Status; }
set { marital_Status = value; }
}

public string Gender
{
get { return gender; }
set { gender = value; }
}

public void insertInfo()
{
CustomerDataAccess insertObj = new CustomerDataAccess(Registered_Date, First_Name, Age, Marital_Status, Gender);

insertObj.insertCustomerInfo();
}
}

最后是数据访问层:

public class CustomerDataAccess
{
public CustomerDataAccess(DateTime Registered_Date, string First_Name, int Age, string Marital_Status, string Gender)
{
this.registrationDate = Registered_Date;
this.fName = First_Name;
this.userAge = Age;
this.marriageStatus = Marital_Status;
this.userGender = Gender;
}

SqlConnection con;
SqlCommand cmd;

DateTime registrationDate;
string fName = "";
int userAge;
string marriageStatus;
string userGender;

public void insertCustomerInfo()
{
try
{
con = new SqlConnection("Data Source=LAKHE-PC;Initial Catalog=Sahakari;Integrated Security=True");
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = "sp_registerCust";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@Registered_Date", SqlDbType.DateTime);
cmd.Parameters["@Registered_Date"].Value = registrationDate;
cmd.Parameters.Add("@First_Name", SqlDbType.VarChar);
cmd.Parameters["@First_Name"].Value = fName;
cmd.Parameters.Add("@Age", SqlDbType.Int.ToString());
cmd.Parameters["@Age"].Value = userAge;
cmd.Parameters.Add("@Marital_Status", SqlDbType.VarChar);
cmd.Parameters["@Marital_Status"].Value = marriageStatus;
cmd.Parameters.Add("@Gender", SqlDbType.VarChar);
cmd.Parameters["@Gender"].Value = userGender;

cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

这里使用存储过程,没有问题,而且我可以从 SQL Server 轻松地将数据插入表中。但是从windows窗体来看,它并没有在表中插入数据。请帮助我。

最佳答案

我会做类似下面的事情

用户界面

CustomerHandler custHandler = new CustomerHandler();
// create Customer object and pass to insert method
if (custHandler.InsertCustomer(new Customer(){
FirstName = txt_FirstName.Text, Registered_Date =dateTimePicker1_Date.Value,
//decalare other parameters....
))
{
// insert Success, show message or update label with succcess message
}

在我的BL

public  class CustomerHandler
{
// in BL you may have to call several DAL methods to perform one Task
// here i have added validation and insert
// in case of validation fail method return false
public bool InsertCustomer(Customer customer)
{
if (CustomerDataAccess.Validate(customer))
{
CustomerDataAccess.insertCustomer(customer);
return true;
}
return false;
}
}

在我的 DAL 中

// this is the class you going to use to transfer data across the layers 
public class Customer
{
public DateTime Registered_Date { get; set; }
public string FirstName { get; set; }
//so on...

}

public class CustomerDataAccess
{
public static void insertCustomer(Customer customer)
{
using (var con = new SqlConnection("Data Source=LAKHE-PC;Initial Catalog=Sahakari;Integrated Security=True"))
using (var cmd = con.CreateCommand())
{
con.Open();
cmd.CommandText = "sp_registerCust";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Registered_Date", customer.Registered_Date);
cmd.Parameters.AddWithValue("@FirstName", customer.FirstName);
// so on...
cmd.ExecuteNonQuery();

}

}

internal static bool Validate(Customer customer)
{
// some validations before insert
}
}

关于c# - Windows窗体应用中的三层架构实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16643991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com