[Mono-devel-list] Data Adapter problem
Daniel Morgan
danielmorgan at verizon.net
Wed Jul 13 21:36:43 EDT 2005
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;
}
}
}
More information about the Mono-devel-list
mailing list