2012-03-10 16 views
0

まず、このサイトは過去2〜3週間で大きな助けになりました。さて、私はWindowsフォームのアプリケーションをC#でフィルタリングのためのテキストボックス、リストビューと2つのテキストボックスと2つのボタンを1つの新しい在庫を追加すると1つを更新するために書いている。SQLCEを更新すると、列のデータ全体が変更されます。C#

アイデアは、プログラムを開いてすべての在庫を表示し、編集する項目を選択し、2つのテキストボックスに値をドロップします。2つのテキストボックスに変更して保存するか、新しい在庫アイテムを追加できます。

私はSQLCEデータベースを更新するためにいくつかのコードを手に入れましたが、うまくいきましたが、私はこのコードを別のフォームで使用しようとしたときに在庫リストを更新しようとしました。正しく。選択された行の代わりに列全体が更新されます。

私はゼロから書いてみましたし、作業コードもコピーしていましたが、両方とも同じエラーが出ます。ここで私が使用しているコード、株式は全体のコードを投稿して申し訳ありませんが誤っ

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms;   
    using System.Data.SqlServerCe; 

    namespace WindowsFormsApplication1 
    { 
    public partial class Form1 : Form 
    { 
    SqlCeConnection cn = new SqlCeConnection("Data source = c:\\Clients.sdf"); 
    string QTYinStock; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      cn.Open(); 
      ReadStock(new SqlCeCommand("SELECT * FROM Stock ORDER BY Cartridge_Code", cn)); 

     } 

     catch (SqlCeException ex) 
     { 
      MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      Application.ExitThread(); 

     } 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 

     if (checkBox1.Checked == true) 
     { 

      //Check the QTY 
      int QTY; 
      bool isInteger = int.TryParse(textBox2.Text, out QTY); 



      if (isInteger) 
      { 
       SqlCeCommand cm = new SqlCeCommand("INSERT INTO Stock(QTY_in_Stock, Cartridge_Code) VALUES(@QTY_in_Stock, @Cartridge_Code)", cn); 
       cm.Parameters.AddWithValue("@QTY_in_Stock", textBox2.Text); 
       cm.Parameters.AddWithValue("@Cartridge_Code", textBox3.Text); 


       try 
       { 
        int affectedRows = cm.ExecuteNonQuery(); 

        if (affectedRows > 0) 
        { 
         MessageBox.Show("Insert Successfull!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); 
         textBox1.Text = ""; 
         textBox2.Text = ""; 
         textBox3.Text = ""; 
         ReadStock(new SqlCeCommand("SELECT * FROM Stock ORDER BY Cartridge_Code", cn)); 

        } 

        else 
        { 
         MessageBox.Show("Insert Failed!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 

        } 
       } 

       catch (Exception ex) 
       { 
        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 


       } 
      } 
      else 
      { 
       MessageBox.Show("No data inserted! The QTY is not valid!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); 


      } 
     } 
     else 
     { 
      MessageBox.Show("Please ensure all details are correct and check the checkbox"); 
     } 
    } 

    private void Texboxes_TextChanged(object sender, EventArgs e) 
    { 
     if (textBox2.Text != "" && textBox3.Text != "") 
     { 
      button1.Enabled = true; 
      button2.Enabled = true; 

     } 

     else 
     { 
      button1.Enabled = false; 
      button2.Enabled = false; 
     } 
    } 
    public void ReadStock(SqlCeCommand cm) 
    { 

     listView1.Items.Clear(); 

     SqlCeDataReader dr3 = cm.ExecuteReader(); 

     while (dr3.Read()) 
     { 

      ListViewItem it3 = new ListViewItem(dr3["QTY_in_Stock"].ToString()); 
      it3.SubItems.Add(dr3["Cartridge_Code"].ToString()); 




      listView1.Items.Add(it3); 
     } 
     dr3.Close(); 
     dr3.Dispose(); 

    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     ReadStock(new SqlCeCommand("SELECT * FROM Stock WHERE Cartridge_Code LIKE '%" + textBox1.Text + "%' ORDER BY Cartridge_Code", cn)); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked == true) 
     { 

      int QTY; 
      bool isInteger = int.TryParse(textBox2.Text, out QTY); 

      if (isInteger) 
      { 
       SqlCeCommand cm = new SqlCeCommand("UPDATE Stock SET QTY_in_Stock = @QTY_in_Stock, Cartridge_Code = @Cartridge_Code WHERE QTY_in_Stock = '" + QTYinStock +"'", cn); 
       cm.Parameters.AddWithValue("@QTY_in_Stock", textBox2.Text); 
       cm.Parameters.AddWithValue("@Cartridge_Code", textBox3.Text); 



       try 
       { 
        cm.ExecuteNonQuery(); 
        ReadStock(new SqlCeCommand("SELECT * FROM Stock ORDER BY Cartridge_Code", cn)); 

        textBox2.Text = textBox3.Text = ""; 


       } 
       catch (Exception ex) 
       { 

        MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 


       } 

       checkBox1.Checked = false; 
      } 
      else 
      { 

       MessageBox.Show("The QTY Is Not Valid", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); 

      } 
     } 
     else 
     { 
      MessageBox.Show("Please ensure all Data is correct and checkbox is Checked"); 
     } 
    } 

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (listView1.SelectedItems.Count > 0) 
     { 

      QTYinStock = textBox2.Text = listView1.SelectedItems[0].Text; 
      textBox3.Text = listView1.SelectedItems[0].SubItems[1].Text; 


     } 

     else 
     { 
      textBox2.Text = textBox3.Text = ""; 


     } 
    } 
    } 
    } 

をアップロードし、私はそのきちんとコーディングされていない知っていた場合、その2つのだけのテキストボックスからの値からデータベース内の2つのフィールドを更新するためですこれは構文エラーだけであれば、私は約1ヶ月間コーディングしてきました。私はこれをほぼ一日眺めていたので、それを指摘してください。感謝。

答えて

0

QTYinStockStockテーブルの複数のレコードと一致すると思われます。 Stockテーブルには、各レコードを一意に識別できるように、自動インクリメント整数値を持つプライマリキーの設定が必要です。

の代わりに:

UPDATE証券SET QTY_in_Stock = @QTY_in_Stock、Cartridge_Code = @Cartridge_Code QTY_in_Stock =「」+ QTYinStock + "「あなたが使用する"

UPDATE Stock SET QTY_in_Stock = @QTY_in_Stock, Cartridge_Code = @Cartridge_Code WHERE StockID = " + stockID 

株価変数は変数に保持されている一意の行識別子です。rをロードすると、いつでもこの値をリタイアする必要がありますecords。 @QTY_in_Stock値と@Cartridge_Code値のように、WHERE句の変数をパラメータにすることも検討する必要があります。

関連する問題