C# 如何使用MVC Winforms在数据库中添加新记录
我想使用MVC模式winforms将记录添加到数据库中。将记录添加到数据库中的函数正在工作,但我想使用object方法来完成 有人问一下,我在这里用MVC模式犯了什么错误 视图: 型号:C# 如何使用MVC Winforms在数据库中添加新记录,c#,sql,winforms,model-view-controller,C#,Sql,Winforms,Model View Controller,我想使用MVC模式winforms将记录添加到数据库中。将记录添加到数据库中的函数正在工作,但我想使用object方法来完成 有人问一下,我在这里用MVC模式犯了什么错误 视图: 型号: namespace MVCwithDBFormReg.Model { public class User { public string FirstName { get; set; } public string LastName { get;
namespace MVCwithDBFormReg.Model
{
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Language{ get; set; }
public string Country{ get; set; }
public string State{ get; set; }
public int Zipcode { get; set; }
public string TimeZone{ get; set; }
public Gender Sex { get; set; }
public enum Gender
{
Male = 1,
Female = 2
}
public string Month { get; set; }
public string Day { get; set; }
public int Year { get; set; }
public string Occupation { get; set; }
}
控制器:
namespace MVCwithDBFormReg.Controller
{
public class UserController
{
private SqlConnection sqlConnection1;
private void ViewOnSave(User model)
{
if (model.FirstName == "" || model.LastName == "")
MessageBox.Show("Please enter your name");
else
{
sqlConnection1.Open();
string insert = "INSERT INTO REGISTER(FNAME, LNAME, LANG, COUNTRY, STATE, ZIPCODE, TIMEZONE, GENDER, BDAY, BMONTH, BYEAR, OCCUPATION) " +
"VALUES ('" + model.FirstName + "','" + model.LastName + "','"
+ model.Language + "','" + model.Country + "','"
+ model.State + "','" + model.Zipcode
+ "','" + model.TimeZone + "','"
+ model.Sex + "','" + model.Day + "','"
+ model.Month + "','" + model.Year + "','"
+ model.Occupation + "')";
SqlCommand cmd = new SqlCommand(insert, this.sqlConnection1);
cmd.ExecuteNonQuery();
sqlConnection1.Close();
MessageBox.Show("You have been successfully registered to our database.");
}
}
}
}
public UserController(IUserView view)
{
_view = view;
_view.Create += ViewOnSave;
}
private void ViewOnSave(User model)
{
SqlConnection connection = new SqlConnection(connString);
connection.Open();
//... save query goes here
}
这在技术上并不完全是MVC(我怀疑MVC在WinForms项目中有多大意义,MVVM模式已经证明自己更有用。尽管我可能错了,因为在某些特殊情况下MVC是有意义的) 首先,您的模型类不是UserRegister,而是User。其次,您不一定需要UserRegister类,因为您可以在controller中进行保存(这不是一个很好的实践,但对于培训来说足够简单)。或者,如果您真的想将数据库操作与控制器代码分开,您可以使用一些方便的方法,比如存储库模式(就像一个存储库类中的UserRegister、UserLoad、UserFind类)。我建议你读一些马丁·福勒(Martin Fowler)关于建筑和设计的书(或者只是网络教程) 现在我们已经了解了您的模型是什么(纯数据)-用户。您的视图不应该有任何逻辑(如将数据保存到DB或计算泰迪熊的折扣)-仅视图。视图绑定到模型,这意味着它显示了模型的内容,并通过控件设置模型的属性。就像-您有一个用户名文本框,它显示Model.name中的数据,并在更改时设置Model.name 无论何时单击
保存
按钮,视图都会向控制器发送更改的模型,以便它可以对其进行操作。然后,控制器将这些内容组合在一起,比如要求您的UserRegister保存它从视图中获得的用户。顺便说一句,这里不需要事件,尽管你可以使用它们
我将尝试以支持上述所有内容的方式显示更改后的代码:
视图:
模型-无变化;
用户注册-死亡
某处(如Delegates.cs单独文件中):
控制器:
namespace MVCwithDBFormReg.Controller
{
public class UserController
{
private SqlConnection sqlConnection1;
private void ViewOnSave(User model)
{
if (model.FirstName == "" || model.LastName == "")
MessageBox.Show("Please enter your name");
else
{
sqlConnection1.Open();
string insert = "INSERT INTO REGISTER(FNAME, LNAME, LANG, COUNTRY, STATE, ZIPCODE, TIMEZONE, GENDER, BDAY, BMONTH, BYEAR, OCCUPATION) " +
"VALUES ('" + model.FirstName + "','" + model.LastName + "','"
+ model.Language + "','" + model.Country + "','"
+ model.State + "','" + model.Zipcode
+ "','" + model.TimeZone + "','"
+ model.Sex + "','" + model.Day + "','"
+ model.Month + "','" + model.Year + "','"
+ model.Occupation + "')";
SqlCommand cmd = new SqlCommand(insert, this.sqlConnection1);
cmd.ExecuteNonQuery();
sqlConnection1.Close();
MessageBox.Show("You have been successfully registered to our database.");
}
}
}
}
public UserController(IUserView view)
{
_view = view;
_view.Create += ViewOnSave;
}
private void ViewOnSave(User model)
{
SqlConnection connection = new SqlConnection(connString);
connection.Open();
//... save query goes here
}
注意,这里不使用存储库。无论如何,这个MVC仍然是不完整和有缺陷的,我建议阅读一些关于ASP.NET MVC的教程,以便在.NET环境中掌握MVC模式 这属于这里:非常感谢您的回复。在遵循您的方法之后,我发现视图和控制器中的事件处理程序都有问题,这就是为什么我编写它需要更改的原因。:)我会试着在我的帖子里修改它。谢谢。在控制器中使用sqlconnection还不错??这不是一个好的实践,但对于小型/学习项目来说已经足够舒适了。Eventhandler已修复。@Dmitry Reznik:Eventhandler仍然存在相同的问题。
public UserController(IUserView view)
{
_view = view;
_view.Create += ViewOnSave;
}
private void ViewOnSave(User model)
{
SqlConnection connection = new SqlConnection(connString);
connection.Open();
//... save query goes here
}