在表单之间传递值并从数据库中检索数据

Posted

技术标签:

【中文标题】在表单之间传递值并从数据库中检索数据【英文标题】:Passing value between form and retrieving data from database 【发布时间】:2013-02-22 15:12:24 【问题描述】:

在我的 Windows 表单应用程序中,我有一个用户输入的表单,例如姓名地址......等等......

当用户按下添加条目时,所有输入条目将被添加到数据库中,同时,订单号将传递到另一个表单,我有一个 SQL 查询来获取该特定订单的数据并填充它们在各自的文本框中。

但是当我将订单号从 form1 传递到 form2,并将该订单号传递给从数据库中检索数据的方法时,它显示数据库中没有这样的行,即使条目已经在数据库。如果我在表格 2 中手动硬编码订单号,它就可以工作。

那么,一旦我在数据库中输入这些数据,如何从数据库中检索数据。

基本上,form1 为用户提供订单号,而 form 2 使用该订单号来获取数据。发射顺序是先形式1,后形式2。

要检索的代码

Form1 m = new Form1();
string number = m.orderNumber();
//  string number = "ORD1012013";

string InvSql = "SELECT  (Customer.[Title] + SPACE(2)  + Customer.[Customer's Name]) as CustomerName, Customer.[Customer's Ebayname], Customer.[Email Address], Customer.[Phone Number], (Customer.[Address 1] + SPACE(2)  +Customer.[Address 2] + SPACE(2)  + Customer.[City] + SPACE(2)  + Customer.[Post Code]+  SPACE(2)  + Customer.[Country]) as Address, Customer.[Item Purchased], Customer.[Purchased Date], Customer.[Total Price], Customer.[OrderNumber] FROM Customer WHERE Customer.[OrderNumber]= '" + number + "'";

OleDbConnection cnn = new OleDbConnection(connString);
OleDbCommand cmdOrder = new OleDbCommand(InvSql, cnn);

cnn.Open();

OleDbDataReader rdrOrder = cmdOrder.ExecuteReader();

rdrOrder.Read();

custName.Text = rdrOrder["CustomerName"].ToString();
ebayName.Text = rdrOrder["Customer's Ebayname"].ToString();
email.Text = rdrOrder["Email Address"].ToString();
phone.Text = rdrOrder["Phone Number"].ToString();
address.Text = rdrOrder["Address"].ToString();
item.Text = rdrOrder["Item Purchased"].ToString();
date.Text = Convert.ToString(Convert.ToDateTime(rdrOrder["Purchased Date"]));
price.Text = rdrOrder["Total Price"].ToString();
order.Text = rdrOrder["OrderNumber"].ToString();

rdrOrder.Close();
cnn.Close();

添加条目的代码

private void button1_Click(object sender, EventArgs e)
        
            foreach (Control c in this.Controls)
            
                if (c is MaskedTextBox)
                
                    MaskedTextBox textBox = c as MaskedTextBox;
                    if (textBox.Text == string.Empty)
                    

                        string result = MyMessageBox.ShowBox("Please Enter All Fields", "Warning");
                    

                    else
                    
                        SaveAllListItems();
                        this.Close();
                        PrintOrder m = new PrintOrder();
                        m.Show();

                    
                
            

对于 SaveAllListItems

 private void SaveAllListItems()
        
            string listItems = string.Empty;
            foreach (var listBoxItem in listBox1.Items)
            

                listItems += listBoxItem.ToString();

                if (listBox1.Items.IndexOf(listBoxItem) < listBox1.Items.Count - 1)
                
                    listItems += ", ";
                
            

            InsertUser(maskedTextBox1.Text, comboBox1.Text, maskedTextBox2.Text, maskedTextBox3.Text, maskedTextBox4.Text, maskedTextBox5.Text,
                       maskedTextBox6.Text, maskedTextBox7.Text, maskedTextBox8.Text, maskedTextBox9.Text, listItems, DateTime.Now, maskedTextBox10.Text, orderNumber(), get_next_id());

;
        

对于插入用户

public string InsertUser(string custName, string title, string cust,  string emailAddress, string phoneNumber, string address1, string address2, string city, string postCode, string country, string itemPurchased, DateTime datePurchased, string price,string orderNumber, int id)


    // Create connection objecte

    //string datePurchased = DateTime.Now.ToString("dd/MM/yyyy");


    int ix = 0;
    string rTurn = "";
    OleDbConnection oleConn = new OleDbConnection(connString);
    try
    
        oleConn.Open();
        string sql = "INSERT INTO [Customer]([Customer's Ebayname], [Title],  [Customer's Name], [Email Address] ,[Phone Number], [Address 1], [Address 2], [City], [Post Code], [Country] , [Item Purchased], [Purchased Date], [Total Price], [OrderNumber], [NumGenerate])" +
                 "VALUES ( @custName, @title, @cust, @emailAddress, @phoneNumber, @address1, @address2, @city, @postCode, @country , @itemPurchased, @datePurchased, @price, @orderNumber, @id)";
        OleDbCommand oleComm = new OleDbCommand(sql, oleConn);

        oleComm.Parameters.Add("@custName", OleDbType.Char).Value = custName;
        oleComm.Parameters.Add("@title", OleDbType.Char).Value = title;
        oleComm.Parameters.Add("@cust", OleDbType.Char).Value = cust;
        oleComm.Parameters.Add("@emailAddress", OleDbType.Char).Value = emailAddress;
        oleComm.Parameters.Add("@phoneNumber", OleDbType.Char).Value = phoneNumber;
        oleComm.Parameters.Add("@address1", OleDbType.Char).Value = address1;
        oleComm.Parameters.Add("@address2", OleDbType.Char).Value = address2;
        oleComm.Parameters.Add("@city", OleDbType.Char).Value = city;
        oleComm.Parameters.Add("@postCode", OleDbType.Char).Value = postCode;
        oleComm.Parameters.Add("@country", OleDbType.Char).Value = country;
        oleComm.Parameters.Add("@itemPurchased", OleDbType.Char).Value = itemPurchased;
        oleComm.Parameters.Add("@datePurhcased", OleDbType.Date).Value = datePurchased;
        oleComm.Parameters.Add("@price", OleDbType.Char).Value = price;
        oleComm.Parameters.Add("@orderNumber", OleDbType.Char).Value = orderNumber;
        oleComm.Parameters.Add("@id", OleDbType.Integer).Value = id;



        ix = oleComm.ExecuteNonQuery();
        if (ix > 0)
            rTurn = "User Added";
        else
            rTurn = "Insert Failed";
    
    catch (Exception ex)
    
    
    finally
    
        oleConn.Close();
    
    return rTurn;
    

生成 OrderNumber

  public string orderNumber()
        
           string ord = "ORD" + get_next_id() + DateTime.Now.Year;
           return ord;
       

【问题讨论】:

贴出写入数据库的代码,以防与事务等有关。 如果硬编码版本有效,听起来您没有正确传递订单号,您是否逐步查看是否传递了正确的订单号?也许发布该代码。 是的,当我放断点时,我可以看到通过的订单号.. @AmritSharma OrderNumber() 的代码是什么? 添加操作和检索操作在一个接一个的发生.. 【参考方案1】:

看起来您在添加时调用m.orderNumber();,在检索时再次调用,并且在该方法中您调用get_next_id()。因此,在从您保存的值中检索时,orderNumber 正在增加。 (即保存订单#1,检索订单#2)

您可能应该将最后保留的订单 # 存储在静态属性中,或者将其直接传递给表单以进行检索。

【讨论】:

你能建议我如何将 orderNumber() 方法的输出存储在静态变量中..【参考方案2】:

您是否检查过 OrderNumber 字段的排序规则?这定义了如何在 SQL Server 中存储/比较文本。要检查的另一件事是字母的大小写。它们必须是大写/小写吗?

【讨论】:

以上是关于在表单之间传递值并从数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将 jQuery 日期选择器值保存到数据库并从数据库中检索

从 Django HTML 表单中检索数据并将其传递给 MySQL 数据库

从使用 jQuery 加载的表单中检索数据并将其传递给父页面

访问 BOOL 值并从数组中设置表格单元格

将数据数组从表单传递到 ajax 到 PHP 发布文件

无法从 html 表单传递的 objectID 中检索对象的属性