none
bindingSource.RemoveAt不能刪除資料庫裡的資料?? RRS feed

  • 問題

  • 大家好,
     
    由於剛接觸C#
    對於一些語法還不熟悉
    有個問題請大家幫忙
     
    目前的作業系統版本- Windows XP
    開發工具版本-Visual Studio 2005
    開發語言-Visual C#
    開發環境-Pocket PC
     

    擷取MSDN Library上的程式碼作修改來測試
     
     private void button1_Click(object sender, EventArgs e)
            {
                string connectionString;
                connectionString = @"Data Source =\Program Files\DeviceApplication1\Northwind.sdf;";
                connectionString = connectionString + " Pwd ='';encrypt database =TRUE";
                string selectCmd = "SELECT * FROM Customers";
     
                SqlCeConnection conn = new SqlCeConnection(connectionString);
                conn.Open();
               
                SqlCeDataAdapter customersTableAdapter = new SqlCeDataAdapter(selectCmd, connectionString);
                DataTable customerTable = new DataTable();
     
                customersTableAdapter.Fill(customerTable);
                bindingSource1.DataSource = customerTable;
     
                label1.Text = "starting count:" + bindingSource1.Count.ToString();
     
                bindingSource1.RemoveAt(4);
     
                label2.Text = "count after removal:" + bindingSource1.Count.ToString();
     
            }
     
    但後來去資料庫看,
    卻發現資料並沒有刪除
    想請問RemoveAt是只能表面刪除資料
    而不是真正刪除資料庫裡的資料嗎??
     
    那如果要真正刪除的話
    該怎麼做呢??
     
    麻煩各位高手幫個忙

    2007年8月17日 上午 08:22

所有回覆

  • hi  你好:

         SqlCeCommand  cmd  = new SqlCeCommand ( Sql語法 , 連線物件)

         cmd.ExcuteNonQuery( )   <---執行sql語法透過Insert、Update、delete..................等等

         

          上面sql語法看你要下刪除什麼,填上去就可以嚕  

                                                                                         馬小玲

    2007年8月17日 上午 08:49
  • 謝謝您的解答!!
     
    還有一個問題
    我利用datatable和dataset讓資料表呈現出來
    然後利用bindingSource.Position取得現在位置
    想刪除目前這個位置的資料
     
    在sql delete語法裡
    deleteCmd = "delete * FROM Employees where '" + bindingSource1.Position + "'";
    卻執行失敗
    我是要將bindingSource1.Position用另一個變數設嗎??
     
    麻煩指點一下!!
    謝謝!!

    2007年8月17日 上午 09:22
  • hi 你好:

        你的sql語法怪怪的ㄛ

         delete  *   from  Employees  where  字串    <----這裡我沒看過這種

       通常要刪都會是 比如  delete  *   from  Employees  where  employeeID=xxxx  類似這樣

                                                                                     馬小玲 

    2007年8月17日 上午 09:48
  • delete的語法我不小心搞錯了
    謝謝提醒!!
     
    我試著把語法改成這樣
    bindingSource1.RemoveAt(bindingSource1.Position);
    int x = bindingSource1.Position + 1;
    string deleteCmd = "delete * FROM Employees where Employee ID='"+x+"'";
    SqlCeCommand cmd = new SqlCeCommand(deleteCmd, conn);
    但還是不行
    是Employee ID='"+x+"'地方寫錯了嗎
     
    我只知道若要取textbox輸入的值
    要寫成Employee ID='"+textbox名稱.txt+"'
    但不曉得若是區域變數該怎麼寫??
     
    我有先設一個messagebox作測試
    int x = bindingSource1.Position + 1;
    MessageBox.Show("欄位為" + x, "測試");
    顯示出來的欄位值是對的
     
    麻煩再教教我吧
    謝謝大家!!

     

    2007年8月18日 上午 03:40
  • hi 你好:

             你說不行那麼錯誤訊息是什麼呢?????

             單看sql語法的話,感覺好像Employee ID  這個有問題,中間空格,覺得好像不太對ㄛ

     

            還有一個地方 你確定你的Position跟EmployeeID是對的起來的嗎???

                                                                                                 

                                                                               馬小玲 

    2007年8月19日 下午 12:05
  • 甚麼跟甚麼嗎?

    ADO.NET不是教的很清楚了嗎?

    你只有執行 DataAdapt.Fill 當然從資料庫抓資料到記憶體裡的DataTable,不管你在DataTable做新查刪修都不會影響資料庫,你要做DataAdapt.Update的動作才會將結果寫回資料庫.

    2007年8月19日 下午 12:36
  • bindingSource1.RemoveAt(bindingSource1.Position);
    int x = bindingSource1.Position + 1;
    string deleteCmd = "delete * FROM Employees where Employee ID='"+x+"'";
    SqlCeCommand cmd = new SqlCeCommand(deleteCmd, conn);

     

    這之後,你有執行cmd.ExecuteNonQuery嗎?

    如果沒有執行這個,那它不會去執行你的DeleteCommand.

    所以加上

    conn.Open() //如果連線已開,就不用再開.

    cmd.ExecuteNonQuery();//這行就會去執行你的cmd內的語法. 像是Insert,Update,Delete.

    conn.Close()//如果後面還會用到連線,就不用關,不然就關閉連線.

     

    因為只看到你設好了Command,但沒見你去"執行".

    2007年8月19日 下午 03:18
  • 看了大家給的意見
    努力試了又試
    但出現問題
     
    執行了DataAdapt.Update的動作
    資料庫裡的資料仍然沒有刪除
     
    若是利用delete的語法
    顯示的錯誤訊息為
    "剖析查詢時發生錯誤[token line number=1,token line offset=8,token in error=*]"
     
    至於position和EmployeeID
    我將int x = bindingSource1.Position + 1;
    x的數值和EmployeeID是對的起來的
     
    個人還是覺得錯誤應該會出現在
    bindingSource1.RemoveAt(bindingSource1.Position);
    int x = bindingSource1.Position + 1;
    string deleteCmd = "delete * from Employees where EmployeeID='" + x + "'";
    但實在是無法找出錯誤
     
    麻煩大家幫幫忙
    謝謝!!

    2007年8月20日 上午 11:09