[Mono-aspnet-list] Auto SQL generation during Update requires a valid SelectCommand

jan van der watt janvanderwatt at gmail.com
Mon Mar 16 20:28:48 EDT 2009


Hi,

This error has been reported in this forum (in 2006 and 2008), but no
apparent resolution has been provided, so I am re-posting with more
information.

I must be missing something really obvious so I would really appreciate a
pointer in the right direction as updating/inserting is obviously essential
to any web site :-) and posting a definite/detailed resolution would also
help other beginners.

I get this error during any and all attempts to update/add a record in my
MySQL database on openSUSE 11 using MONO 2.2 (or 1.9) with MySql Connector
5.x (or 6.0).

Caught an exception:
Message: [Auto SQL generation during Update requires a valid SelectCommand.]
Occurred: [  at System.Data.Common.DbDataAdapter.Update
(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping
tableMapping) [0x00000] ]
In: [Int32 Update(System.Data.DataRow[],
System.Data.Common.DataTableMapping)]

Note: The code works fine on Windows XP using the same connectors and
connection strings to the same MySQL database.

After many many variations and attempts, all failing, I took the example
from the MySQL Connector Manual (I only added the connection string/table
name and error trapping):

        String myConnection =
"Server=www.xxxyyyzzz.org;Uid=demo;Pwd=xxxyyyzzz;Database=demo;";
        String mySelectQuery = "SELECT * FROM Tenant;";
        String myTableName = "Tenant";

        MySqlConnection myConn = new MySqlConnection(myConnection);
        MySqlDataAdapter myDataAdapter = new MySqlDataAdapter();
        myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery,
myConn);
        MySqlCommandBuilder cb = new MySqlCommandBuilder(myDataAdapter);

        try {

            myConn.Open();

            DataSet ds = new DataSet();
            myDataAdapter.Fill(ds, myTableName);

            //code to modify data in DataSet here
            DataRow row = ds.Tables[myTableName].Rows[0];
            row.BeginEdit();
            row["Tenant"] += "-";      // very simple change
            row.EndEdit();

            //Without the MySqlCommandBuilder this line would fail
            int updated_records = myDataAdapter.Update(ds, myTableName);

            Response.Write(Utilities.variable("updated records",
updated_records));
        } catch (Exception ex) {
            Response.Write(Utilities.format_exception(ex));
        }

        myConn.Close();


The schema for Tenant is:
CREATE TABLE `Tenant` (
  `TenantID` int(11) NOT NULL auto_increment,
  `Tenant` varchar(50) NOT NULL,
  PRIMARY KEY  (`TenantID`),
  KEY `TenantID` (`TenantID`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

I have two openSUSE boxes, one built from the openSUSE 11 distro DVD, and
another, a Linode (virtual machine) set up from the Linode pre-installed
images. Both machines give the same problem.

I installed using YaST (so, I did not compile from source) trying both:
ftp://ftp.novell.com/pub/mono/download-stable/openSUSE_11.1/i586/ and
http://download.opensuse.org/update/11.0/rpm/

Thanks in advance.

Jan
-- 
View this message in context: http://www.nabble.com/Auto-SQL-generation-during-Update-requires-a-valid-SelectCommand-tp22550410p22550410.html
Sent from the Mono - ASP.NET mailing list archive at Nabble.com.



More information about the Mono-aspnet-list mailing list