[Mono-devel-list] Data Adapter problem

Konstantin Triger kostat at mainsoft.com
Mon Jul 18 07:03:41 EDT 2005


Hello,

Please file a bug in Bugzilla.

Regards,
Konstantin Triger



Daniel Morgan wrote:

> I have a problem with the data adapter on Mono 1.1.8 on Windows.  Has 
> this been fixed in svn?
>
> Notice my test case does not use column nor table mappings.
>
> Results on Dot Net 1.1:
>
> E:\projects\DotNet\C#\TestSqlClientAdapter\bin\Debug>TestSqlClientAdapter.exe 
>
> Apapter Test Begin...
> Insert...
> Value 0: 3
> Value 0: Value inserted
> Rows retrieved: 1
> Update...
> Value 0: 3
> Value 0: Value updated
> Rows retrieved: 1
> Delete...
> Rows retrieved: 0
> Done.
>
> Results on Mono 1.1.8 on Windows:
>
> E:\projects\DotNet\C#\TestSqlClientAdapter\bin\Debug>mono 
> TestSqlClientAdapter.e
> xe
> Apapter Test Begin...
> Insert...
>
> Unhandled Exception: System.IndexOutOfRangeException: 
> DataColumnMappingCollectio
> n doesn't contain DataColumnMapping with SourceColumn 'num_value'.
> in <0x000cd> System.Data.Common.DataColumnMappingCollection:get_Item 
> (System.Str
> ing sourceColumn)
> in (wrapper remoting-invoke-with-check) 
> System.Data.Common.DataColumnMappingColl
> ection:get_Item (string)
> in <0x001eb> 
> System.Data.SqlClient.SqlCommandBuilder:CreateInsertCommand (System
> .Data.DataRow row, System.Data.Common.DataTableMapping tableMapping)
> in (wrapper remoting-invoke-with-check) 
> System.Data.SqlClient.SqlCommandBuilder:
> CreateInsertCommand 
> (System.Data.DataRow,System.Data.Common.DataTableMapping)
> in <0x00197> 
> System.Data.SqlClient.SqlCommandBuilder:RowUpdatingHandler (System.
> Object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e)
>
>
> Here is the test case:
>
> using System;
> using System.Data;
> using System.Data.Common;
> using System.Data.SqlClient;
>
> namespace TestSqlClientAdapter {
>    public class Test {
>        static SqlConnection con;
>        static SqlTransaction trans;
>
>        public static void Main (string[] args)
>        {
>            Console.WriteLine("Apapter Test Begin...");
>            con = new 
> SqlConnection("server=localhost;database=pubs;user 
> id=sa;password=mypass");
>            con.Open();
>                      Setup();
>
>            trans = con.BeginTransaction();
>            Insert();
>            trans.Commit();
>
>            trans = con.BeginTransaction();
>            Update();
>            trans.Commit();
>
>            trans = con.BeginTransaction();
>            Delete();
>            trans.Commit();
>
>            con.Close();
>            Console.WriteLine("Done.");
>        }
>
>        static void Setup()
>        {
>            SqlCommand cmd = con.CreateCommand();
>            cmd.Transaction = trans;
>            cmd.CommandText = "DROP TABLE MONO_TEST_ADAPTER1";
>
>            try { cmd.ExecuteNonQuery();
>            } catch(SqlException e) { }
>
>            cmd.CommandText =
>                "CREATE TABLE MONO_TEST_ADAPTER1 (" +
>                " num_value int primary key," +
>                " txt_value varchar(64))";
>            cmd.ExecuteNonQuery();
>
>            cmd.Dispose();
>            cmd = null;
>        }
>
>        static void Insert()
>        {
>            Console.WriteLine("Insert...");
>
>            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM 
> MONO_TEST_ADAPTER1", con);
>            adapter.SelectCommand.Transaction = trans;
>            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
>                      DataSet ds = new DataSet();
>            adapter.Fill(ds,"MONO_TEST_ADAPTER1");
>                      DataRow row = 
> ds.Tables["MONO_TEST_ADAPTER1"].NewRow();
>            row["num_value"] = 3;
>            row["txt_value"] = "Value inserted";
>
>            ds.Tables["MONO_TEST_ADAPTER1"].Rows.Add(row);
>
>            adapter.Update(ds, "MONO_TEST_ADAPTER1");
>
>            row = null;
>            builder = null;
>            adapter = null;
>            ds = null;
>                      ReadData(con, "SELECT * FROM MONO_TEST_ADAPTER1");
>        }
>
>        static void Update()
>        {
>            Console.WriteLine("Update...");
>
>            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM 
> MONO_TEST_ADAPTER1", con);
>            adapter.SelectCommand.Transaction = trans;
>            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
>                      DataSet ds = new DataSet();
>            adapter.Fill(ds,"MONO_TEST_ADAPTER1");
>                      DataRow row = 
> ds.Tables["MONO_TEST_ADAPTER1"].Rows[0];
>            row["txt_value"] = "Value updated";
>
>            adapter.Update(ds, "MONO_TEST_ADAPTER1");
>
>            row = null;
>            builder = null;
>            adapter = null;
>            ds = null;
>
>            ReadData(con, "SELECT * FROM MONO_TEST_ADAPTER1");
>
>        }
>
>        static void Delete()
>        {
>            Console.WriteLine("Delete...");
>
>            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM 
> MONO_TEST_ADAPTER1", con);
>            adapter.SelectCommand.Transaction = trans;
>            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
>                      DataSet ds = new DataSet();
>            adapter.Fill(ds,"MONO_TEST_ADAPTER1");
>                      ds.Tables["MONO_TEST_ADAPTER1"].Rows[0].Delete();
>
>            adapter.Update(ds, "MONO_TEST_ADAPTER1");
>
>            builder = null;
>            adapter = null;
>            ds = null;
>
>            ReadData(con, "SELECT * FROM MONO_TEST_ADAPTER1");
>
>        }
>
>        private static void ReadData(IDbConnection con, string sql)
>        {
>            IDbCommand cmd = con.CreateCommand();
>            cmd.Transaction = trans;
>            cmd.CommandText = sql;
>            IDataReader reader = cmd.ExecuteReader();
>            int rows = 0;
>            while(reader.Read()) {
>                Console.WriteLine("Value 0: {0}", reader[0]);
>                Console.WriteLine("Value 0: {0}", reader[1]);
>                rows++;
>            }
>            Console.WriteLine("Rows retrieved: {0}", rows);
>            reader.Close();
>            reader = null;
>            cmd.Dispose();
>            cmd = null;
>        }
>    }
> }
>
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list





More information about the Mono-devel-list mailing list