2009-09-22 85 views
0

我對ADO.NET服務有一個非常簡單的練習:將產品列表放入列表框中,當列表框中的選擇更改時,在兩個文本框中顯示UnitPrice和UnitInStock。 然後更改文本框中的數據並保存更改。ADO.NET服務更新錯誤

這是在客戶端的所有代碼:

namespace TestApp 
{ 
    public partial class Form1 : Form 
    { 
     NorthwindDataContext ctx = new NorthwindDataContext(new Uri("http://localhost:3540/Northwind.svc/")); 
     public Form1() 
     { 
      InitializeComponent(); 
      var q = from p in ctx.Products 
        select p; 
      listBox1.DataSource = q.ToList(); 
      listBox1.DisplayMember = "ProductName"; 
     } 

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      var p = listBox1.SelectedItem as Product; 
      textBox1.Text = p.UnitPrice.ToString(); 
      textBox2.Text = p.UnitsInStock.ToString(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     {  
      var p = listBox1.SelectedItem as Product; 
      p.UnitPrice = Decimal.Parse(textBox1.Text); 
      p.UnitsInStock = short.Parse(textBox2.Text); 
      try 
      { 
       //ctx.AttachTo("Products", p); 
       //ctx.BeginSaveChanges(); 
       ctx.UpdateObject(p); 
       ctx.SaveChanges(SaveChangesOptions.None); 
      } 
      catch (Exception ex) 
      { 
       label3.Text = ex.Message; 
      } 
     } 
    } 
} 

的ADO.NET服務是罰款和它的權限設置爲:

config.SetEntitySetAccessRule("*", EntitySetRights.All); 

當我打的保存按鈕,我得到了錯誤消息爲: ex.Message =「處理此請求時發生錯誤。」

不知道爲什麼。請幫忙。

回答

0

請您開通服務的UserVerboseErrors

config.UseVerboseErrors = true; 

而且你已經做了之後,讓我們知道是什麼錯誤,將有助於覆蓋的方法handleexception

protected override void HandleException(HandleExceptionArgs args) 

+0

但是,如果我打賭,問題的根源在於,您將重新使用從數據服務中使用不同上下文獲取的對象(p),然後使用它來保存該對象。 – dmportella 2009-09-22 15:27:09

+0

添加config.UseVerboseErrors = true後;並確保數據綁定到列表框和保存按鈕使用相同的上下文(創建上下文在類級別,而不是方法級別),我仍然得到相同的錯誤。 – KentZhou 2009-09-22 15:38:15

+0

但你得到什麼錯誤?查看服務的內部異常,即在handleexception超載上放置一個斷點並查看實際錯誤。 – dmportella 2009-09-23 09:41:59

0

這是用於Silverlight客戶端還是WinForms?你爲什麼從使用BeginSaveChanges()切換到SaveChanges()?