【问题标题】:Updating MySQL Database using MVP Pattern使用 MVP 模式更新 MySQL 数据库
【发布时间】:2015-05-21 06:38:37
【问题描述】:

我是这种模式的新手,我想知道为什么会出错

“无法将 dbnull 转换为其他类型”

我知道我的代码不起作用,这就是为什么它在 _view 上返回一些空值,有什么帮助吗?我在网上得到这个 model.CustomerID = _view.CustomerID;

  Model
  public class CustomerModel
  {
            private string _customerid;
            public string CustomerID;
            {
                get { return _customerid; }
                set { _customerid = value; }
            }
            private string _orderstatus;
            public string OrderStatus
            {
                get { return _orderstatus; }
                set { _orderstatus = value; }
            }
            public void UpdateOrderStatus()
            {
                var connSettings = ConfigurationManager.ConnectionStrings["DB"];
                {
                    string CN = connSettings.ConnectionString;
                    MySqlConnection conn = new MySqlConnection(CN);
                    MySqlCommand cmd = new MySqlCommand("update customerorders set order_status = @value where customerid = @customerid", conn);
                    conn.Open();
                    cmd.Parameters.AddWithValue("@customerid", _customerid);
                    cmd.Parameters.AddWithValue("@value", _orderstatus);
                    cmd.ExecuteNonQuery();
                }
            }
     }

  Interface
  public interface ICustomer
  {
        void SetPresenter(CustomerPresenter presenter);
        void UpdateCustomerOrderStatus(CustomerModel record);
        string CustomerID { get; set; }
        string OrderStatus { get; set; }
  }

  Presenter
  public class CustomerPresenter
  {
        ICustomer _view;
        CustomerModel _model = new CustomerModel();

        public void CustomerPresenter(ICustomer view)
        {
           _view = view;
        }
        private void updateCustomerOrderStatus(CustomerModel model)
        {
            model.CustomerID = _view.CustomerID;
            model.OrderStatus = _view.OrderStatus;
        }
        public void Save()
        {
            updateCustomerOrderStatus(CustomerModel model)
            this._view.UpdateCustomerOrderStatus(CustomerModel record);
        }
  }

  CustomerForm
  public partial class frmCustomer: Form, ICustomer
  {
        CustomerPresenter _presenter
        public void SetPresenter(CustomerPresenter presenter)
        {
           _presenter = presenter
        }
        public string CustomerID
        {
        get { return this.txtCustomerID.Text; }
        set { txtCustomerID.Text = value; }
        }
        public string OrderStatus
        {
        get { return this.txtOrderStatus.Text; }
        set { txtOrderStatus.Text = value; }
        }
        public void UpdateCustomerOrderStatus(CustomerModel record)
        {
            record.CustomerID = txtCustomerID.Text;
            record.OrderStatus = txtOrderStatus.Text;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            _presenter.Save();
        }
  }

【问题讨论】:

  • 代码中的哪一点出现异常?
  • 这里model.CustomerID = _view.CustomerID;
  • 您的代码清楚地表明_view 对象已声明但未初始化。
  • 我已经编辑了我的帖子,请检查一下,已经初始化了它,但现在我的保存事件按钮仍然出现同样的错误。

标签: c# mysql winforms mvp


【解决方案1】:

您的_view 现在确实已正确初始化,但_view.CustomerID 将始终为null,因为您没有在getset 中执行任何操作。因此,当您尝试使用 get 时,它不会返回任何内容,这就是您收到此异常的原因。

【讨论】:

  • 顺便说一句,你从不使用:CustomerModel.UpdateOrderStatus,你应该知道你可以直接调整CustomerModel.CustomerIDCustomerModel.OrderStatus,而不是之间的步骤。
【解决方案2】:

根据代码,_view 永远不会被初始化。

【讨论】:

  • 你能澄清一下你的意思吗?
  • 你只是声明了ICustomer _view;,但从未给_view 赋值。
  • 你的意思是我需要这样的 SetViewValues(ICustomer view) {_view = view}?
  • 是的,这应该在你做之前发生model.CustomerID = _view.CustomerID;
  • 我已经编辑了我的帖子,请检查,已经初始化它,但现在仍然在我的保存事件按钮上出现同样的错误。
【解决方案3】:

如果没有隐藏在视图中,您是否将 CustomerID 隐藏在视图中,我认为它会修复错误

【讨论】:

  • 先生您是什么意思?
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 2011-06-02
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多