none
如何使用sqlcommandbuilder RRS feed

  • 问题

  • 我照着书本编写了一段程序:

                DataSet ds = new DataSet();

                SqlDataAdapter dp = new SqlDataAdapter("select *  from Person", "server=.\\sqlexpress;database=studytest;integrated                                                                                                 security=sspi");           

                dp.Fill(ds, "Perosn");

                ds.Tables[0].Rows[0]["psnAddress"] = "津巴布韦";

                SqlCommandBuilder custCB = new SqlCommandBuilder(dp);

                dp.Update(ds, "Person");

                ds.AcceptChanges();

    问题是:我的数据库 studytest 中,只有一张名为 Person 的表,但是出现了一下错误:

    Unhandled Exception: System.InvalidOperationException: Update unable to find Tab leMapping['Person'] or DataTable 'Person'.

    我很纠结为什么会找不到!!!

    如果不用 sqlcommandbuilder 的话,直接用 Person 表中的数据填充数据集是没问题的,就是说直接连接到数据库是没问题的,只是用了 sqlcommandbuilder 就出问题了,是不是我用错了??

    新手求助,高手帮忙啊!!!

     

    2011年8月23日 2:50

答案

  • 高手,我按着你的方法试了一下,拼写问题去除之后,又出现了一下错误:

     

     

     

    Unhandled Exception: System.InvalidOperationException: Dynamic SQL generation for the UpdateCommand is not supported against

    a SelectCommand that does not return any key column information.

     

     

    那又要怎么解决??

    小弟只是初学者,多多包涵!!

     

    要用SqlCommandBuilder ,您的TABLE必須有Primary Key而且在select敘述中必須包含Primary Key,不過我看您是用select *所以應該在Person資料表中

    建立Primay Key就不會有這個錯誤訊息了


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月24日 2:02

全部回复

  • 检查你的代码里的拼写错误,



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年8月23日 20:39
    版主
  • 若您確定studyteset資料庫中存在Person資料表,以下程式碼以Northwind的Region資料表為例,列出可能因為發生錯誤的地方,您不妨參考檢查是否有類似的狀況導致錯誤:

     

    DataSet ds = new DataSet();
    SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
    scsb.DataSource = ".";
    scsb.InitialCatalog = "studytest";
    scsb.IntegratedSecurity = true;
    using (SqlDataAdapter adapter = new SqlDataAdapter("select * from region", scsb.ToString()))
    {
    	adapter.Fill(ds, "region"); //正確
    	//adapter.Fill(ds, "region "); //錯誤,region後多一個空白
    	ds.Tables[0].Rows[0]["RegionDescription"] = "222";
    	SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
    	//adapter.Update(ds, "region"); //正確
    	adapter.Update(ds, " region"); //region前多一個空白
    	ds.AcceptChanges();
    }
    


     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月23日 22:31
  • 高手,我按着你的方法试了一下,拼写问题去除之后,又出现了一下错误:

     

    Unhandled Exception: System.InvalidOperationException: Dynamic SQL generation for the UpdateCommand is not supported against

    a SelectCommand that does not return any key column information.

     

    那又要怎么解决??

    小弟只是初学者,多多包涵!!

    2011年8月24日 2:00
  • 高手,我按着你的方法试了一下,拼写问题去除之后,又出现了一下错误:

     

     

     

    Unhandled Exception: System.InvalidOperationException: Dynamic SQL generation for the UpdateCommand is not supported against

    a SelectCommand that does not return any key column information.

     

     

    那又要怎么解决??

    小弟只是初学者,多多包涵!!

     

    要用SqlCommandBuilder ,您的TABLE必須有Primary Key而且在select敘述中必須包含Primary Key,不過我看您是用select *所以應該在Person資料表中

    建立Primay Key就不會有這個錯誤訊息了


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月24日 2:02
  • 太感谢了,问题已经解决,谢谢!!!!!!!!!!!
    2011年8月24日 2:44
  • 太感谢了,问题已经解决,谢谢!!!!!!!!!!!
    不客氣,恭喜您問題解決了。
    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月24日 2:54