0

私のWindowsフォームアプリケーションには、ユーザーが名前アドレスなどの入力を行うフォームが1つあります...何とか..

ユーザーがエントリの追加を押すと、すべての入力エントリがデータベースに追加され、同時に注文番号が別のフォームに渡され、そこで特定の注文のデータを取得してそれぞれに入力するための SQL クエリがあります。テキストボックス。

しかし、フォーム 1 からフォーム 2 に注文番号を渡し、その注文番号をデータベースからデータを取得するメソッドに渡すと、エントリが既にデータベースにあるにもかかわらず、データベースにそのような行がないことがわかります。フォーム 2 で注文番号を手動でハードコードすると、機能します。

では、データベースにデータを入力するとすぐに、データベースからデータを取得するにはどうすればよいでしょうか。

基本的に、フォーム 1 はユーザーに注文番号を与え、フォーム 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;
       }
4

2 に答える 2

1

追加するときに呼び出しm.orderNumber();、取得するときにもう一度呼び出し、そのメソッド内で呼び出しているようget_next_id()です。そのため、保存した値からの取得時に orderNumber が増加しています。(つまり、順序 #1 を保存し、順序 #2 を取得)

おそらく、最後に保持された注文を静的プロパティに保存するか、取得のためにフォームに直接渡す必要があります。

于 2013-02-22T15:44:18.077 に答える
0

OrderNumber フィールドの照合を確認しましたか? これは、SQL Server 内でテキストを保存/比較する方法を定義します。もう 1 つ確認すべきことは、文字の場合です。大文字/小文字である必要がありますか?

于 2013-02-22T15:26:21.223 に答える