C# 如何使用MVC Winforms在数据库中添加新记录

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;

我想使用MVC模式winforms将记录添加到数据库中。将记录添加到数据库中的函数正在工作,但我想使用object方法来完成

有人问一下,我在这里用MVC模式犯了什么错误

视图:

型号:

         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
}