日期:2014-05-18  浏览次数:20762 次

DataSet和DataAdapter的疑问
以下程序是按书上的例题写的。做的是把数据库中northwind的Customers表更新其中一个列。
  但我把Customers的内容复制到另一个表AMyCustomers,操作时总提示错误说“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。 ”

SqlDataAdapter thisAdapter = new SqlDataAdapter("select CustomerID,CompanyName from AMyCustomers", thisConnection);但我在这一句里把表名改回 Customers就可以执行,请问为什么呢?
C# code

//Specify SQL Server-specific connection string
            SqlConnection thisConnection = new SqlConnection(@"server=.;Integrated Security=True;database=northwind");

            //Create DataAdapter object for update and other operations
            SqlDataAdapter thisAdapter = new SqlDataAdapter("select CustomerID,CompanyName from AMyCustomers", thisConnection);

            //Create CommandBuilder object to build SQL commands
            SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
            //Create DataSet to contain related data tables,rows,and columns
            DataSet thisDataSet = new DataSet();

            //Fill DataSet using query defined previously for DataAdapter
            thisAdapter.Fill(thisDataSet, "Customers");

            //Show data before change
            Console.WriteLine("name before change:{0}", thisDataSet.Tables["Customers"].Rows[9]["CompanyName"]);

            //Change data in Customers table,row 9,CompanyName column
            thisDataSet.Tables["Customers"].Rows[9]["CompanyName"] = "Acme,Inc.";

            //Call update command to mark change in table
            thisAdapter.Update(thisDataSet, "Customers");
            Console.WriteLine("name after change:{0}", thisDataSet.Tables["Customers"].Rows[9]["CompanyName"]);

            thisConnection.Close();



------解决方案--------------------
引用楼主 yxlovemoney 的帖子:
    以下程序是按书上的例题写的。做的是把数据库中northwind的Customers表更新其中一个列。
    但我把Customers的内容复制到另一个表AMyCustomers,操作时总提示错误说“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。 ”