【问题标题】:Insert data into SQL table from two forms C# winform将数据从两个表单插入到 SQL 表中 C# winform
【发布时间】:2020-06-08 20:14:57
【问题描述】:

我正在尝试将来自frm1frm2 的数据同时插入SQL Server。 frm1 包含产品信息(条形码、数量、价格、增值税、总额等)和frm2包含现金和零钱等付款信息)。这个想法是,当用户点击btnfrm2 时,来自frm1 的数据应该被传递到frm2但不显示)和frm2用户提供支付信息(现金和找零),点击btnsave 后,来自frm1frm2 的数据应该被插入到数据库中。 p>

我创建了一个类和一个将数据传递给frm2的方法。

    internal void mbushe(string[] args)

    {

        for (int i = 0; i < dataTable.Rows.Count; i++)

        {

            arka_data ad = new arka_data();

            ad.NR = int.Parse(txtnrfatures.Text);

            ad.VLERATVSHTOTAL = float.Parse(textBox1.Text);

            ad.BARKODI = int.Parse(dataTable.Rows[i][0].ToString());

            ad.EMERTIMI = dataTable.Rows[i][1].ToString();

            ad.SASIA = int.Parse(dataTable.Rows[i][2].ToString());

            ad.CMIMI = int.Parse(dataTable.Rows[i][3].ToString());

            ad.TVSH = int.Parse(dataTable.Rows[i][4].ToString());

            ad.NENTOTALI = float.Parse(txttotali.Text);

            ad.ZBRITJA = float.Parse(txtzbritja.Text);

            ad.TOTALI = float.Parse(totali.Text);

            ad.KOHA = DateTime.Now;

            ad.KASIERI = lbluser.Text;

            ad.KLIENTI = cmbklienti.Text;

            ad.VLERAETVSH = float.Parse(dataTable.Rows[i][7].ToString());

            ad.VLERAPATVSH = float.Parse(dataTable.Rows[i][6].ToString());

            ad.NRATIKUJVE = int.Parse(lblnumri.Text);

            ad.TOTALIPCS = float.Parse(dataTable.Rows[i][5].ToString());



        }

    }



    public class arka_data

    {

        public int NR { get; set; }

        public int BARKODI { get; set; }

        public string EMERTIMI { get; set; }

        public int SASIA { get; set; }

        public float CMIMI { get; set; }

        public float TVSH { get; set; }

        public float TOTAL { get; set; }

        public float NENTOTALI { get; set; }

        public float ZBRITJA { get; set; }

        public float TOTALI { get; set; }

        public DateTime KOHA { get; set; }

        public string KASIERI { get; set; }

        public string KLIENTI { get; set; }

        public float VLERAETVSH { get; set; }

        public float VLERAPATVSH { get; set; }

        public int NRATIKUJVE { get; set; }

        public float TOTALIPCS { get; set; }

        public float VLERATVSHTOTAL { get; set; }

    }

在第二种形式中,我将使用方法的元素(来自第一种形式)

         cmd.Parameters.Add(new SqlParameter("@nrfatures", mbushe.NR);

         cmd.Parameters.Add(new SqlParameter("@klienti", mbushe.Barkodi)); etc

而 mbushe 是第一种形式的方法

【问题讨论】:

    标签: c# sql winforms


    【解决方案1】:

    如果您的表单使用 MVP 模式最好,AKA 从接口继承。示例

    public class MyForm1 : Form, IView1
    {
        public string SomeData { get { return MyControl1.Text } }
        . . . . 
    }
    
    public class MyForm2 : Form, IView2
    {
        public string SomeOtherData { get { return MyControl1.Text } }
        . . . . 
    }
    

    然后你创建持久化器,它从两个表单中收集数据并保存

    public class FormDataPersister
    {
    
        private IView1 _v1;
        private IView2 _v2;
    
        public class FormDataPersister(IView1 form1Data, IView2 form2Data)
        {
            _v1 = form1Data;
            _v2 = form2Data;        
        }
    
        public void Save()
        {
    
            // HERE collect your data into parameters and SAVE
            // EXAMPLE
             . .  . . . 
            cmd.Parameters.Add(new SqlParameter("@klienti", _v1.Barkodi));
            cmd.ExecuteNonQuery();
        }
    }
    

    【讨论】:

    • 找不到类型或命名空间名称“Iview1”(您是否缺少 using 指令或程序集引用?)@T.S 我如何引用它,以便有用
    • @LeonardGashi IView1IView2 应该是您需要声明的接口。这些接口应该包含您保存在数据库中的属性。这是 MVP 或模型视图演示者模式。请参阅此处stackoverflow.com/questions/2056/…您的表单成为视图模型,您可以轻松获取所需的值,因为它们将在表单上映射到控件值c-sharpcorner.com/UploadFile/vendettamit/…
    【解决方案2】:

    我建议您从 UI 上的数据构建一个对象,然后

    1. 传递它(从一个表格到另一个表格),同时填写越来越多的信息或
    2. 将其存储在某种存储库中,以便代码库的每个部分都可以访问(首选)

    当用户随后单击 Form2 上的 btnsave 按钮时,您只需调用一个保持该对象的代码。

    这样您就可以将表单、其数据和数据库交互逻辑彼此分开。

    【讨论】:

    • #2 将引入对状态控制的需求。如果表单被关闭并重新启动并且保存的对象仍然有旧的表单数据怎么办? #1 将引入对数据完整性控制的需求。如果您还没有收集一个或两个表单数据并按下“保存”怎么办?
    • 您可以根据自己的喜好进行复杂的操作。在没有数据的情况下单击“保存”是一个视图级别的问题。我的问题。都是关于控制状态的。关键是要解耦数据、它的视图和处理逻辑
    • @NorbertHüthmayr 任何简短的例子都会有所帮助,因为我是编程新手
    • @LeonardGashi 一个完整的例子太多了,但我找到了一个有趣的链接,可以帮助您理解这个概念。 stackoverflow.com/a/122565/13567181
    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多