Daniel,

Thanks for reminding me about the DataAdapter...we wouldn't want Tim's hard work to go to waste. :-)

I've jacked in data adapter support. I'm using the app.config to supply the type names (instead of hard coding it in the factory).

Here's the syntax:

// Create Connection
IDbConnection conn =
ProviderFactory.CreateConnectionFromConfig("TdsPubsConnStr");

// Select command
IDbCommand cmd=conn.CreateCommand();
cmd.Text="select * from author";

// Data Adapter
DataSet ds=new DataSet();
IDbDataAdapter adapter=ProviderFactory.CreateDataAdapter(cmd);
adapter.Fill(ds, "Table1");

-- or for the lazy among us :) --

// Create Connection
IDbConnection conn =
ProviderFactory.CreateConnectionFromConfig("TdsPubsConnStr");

// Data Adapter
DataSet ds=new DataSet();
IDbDataAdapter adapter=ProviderFactory.CreateAdapter(conn, "select * from author");
adapter.Fill(ds, "Table1");

--- or for the super lazy among us (like me) ---

// Create Connection
IDbConnection conn =
ProviderFactory.CreateConnectionFromConfig("TdsPubsConnStr");

// Data Adapter
DataSet ds=DataTools.FillDataSet(conn, "select * from author");


Let me know if this will work for you. I'm should have the code committed this evening. (I hope).

Brian



From: "Daniel Morgan" <[EMAIL PROTECTED]>
To: "Tim Coleman" <[EMAIL PROTECTED]>, <[EMAIL PROTECTED]>, "Brian Ritchie" <[EMAIL PROTECTED]>
CC: <[EMAIL PROTECTED]>
Subject: [Mono-list] DbDataAdapter in ADO.NET Provider Factory
Date: Mon, 11 Nov 2002 14:14:52 -0500

Brian,

Can you add the ability to dynamically create a DbDataAdapter for a given
connection class generically?

I would l like to use the adapter in provider generic code. I've also
provided sample code that could create the DbDataAdapter for an ADO.NET data
provider.

What do you think?

// data provider generic code
IDbConnection conn =
ProviderFactory.CreateConnectionFromConfig("TdsPubsConnStr");
CreateXmlFileFromSqlQuery("select * from employee", "employee.xml",
conn, "Mono.Data.TdsClient");

public void CreateXmlFileFromSqlQuery (string sql, string filename,
IDbConnection conn, string providerAssembly) {

IDbCommand cmd = conn.CreateCommand();

// set command properties
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = conn;

DataSet dataSet = new DataSet ();
DataAdapter adapter = CreateNewDataAdapter (cmd, conn);
adapter.Fill (dataSet, "Table1");
dataSet.WriteXml (filename);
}

// sample code to create new data adapter generically
public DataAdapter CreateNewDataAdapter (string provider,
string providerAssembly,
IDbConnection connection, IDbCommand command) {

DataAdapter adapter = null;

switch(provider) {
case "ODBC":
adapter = (DataAdapter) new OdbcDataAdapter ();
break;
case "OLEDB":
adapter = (DataAdapter) new OleDataAdapter ();
break;
case "SQLCLIENT":
adapter = (DataAdapter) new SqlDataAdapter ();
break;
case "LOADEXTPROVIDER":
adapter = CreateExternalDataAdapter ();
if (adapter == null)
return;
break;
default:
Console.WriteLine("Error: Data Adapter not found in provider.");
return;
}
IDbDataAdapter dbAdapter = (IDbDataAdapter) adapter;
dbAdapter.SelectCommand = command;

return adapter;
}

// sample code for loading the concrete subclass of DbDataAdapter
// Thanks to Gonzalo for helping me with this
public DataAdapter CreateExternalDataAdapter (string providerAssembly) {

Assembly ass = Assembly.Load (providerAssembly);
Type [] types = ass.GetTypes ();
foreach (Type t in types) {
if (t.IsSubClassOf ("System.Data.DbDataAdapter") == false)
continue;
}
if (t.IsSubClassOf ("System.Data.DbDataAdapter") == false)
return null; // adapter class not found

adapter = (DataAdapter) Activator.CreateInstance (t);

return adapter;
}

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:mono-list-admin@;ximian.com]On
Behalf Of Brian Ritchieo u
Sent: Saturday, November 09, 2002 11:59 AM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: [Mono-list] ADO.NET Provider Factory


Rodrigo,

Thanks for the review. I guess great minds think alike...I actually already
had a CreateConnectionFromConfig. :)

Here's the syntax for it:

IDbConnection
conn=ProviderFactory.CreateConnectionFromConfig("PubsConnStr");

<appSettings>
<add key="PubsConnStr" value="factory=System.Data.SqlClient;
server=speedy;database=pubs;uid=sa;pwd=" />
</appSettings>

The factory attribute specifies which provider to use. I parse out the
factory attribute, crete the object, and then pass the rest of the
connection string into the provider. The providers are definited in the
app.config (or machine.config).

I'll get the code commited sometime today.

Brian


>From: Rodrigo Moya <[EMAIL PROTECTED]>
>To: Brian Ritchie <[EMAIL PROTECTED]>
>CC: Mono List <[EMAIL PROTECTED]>
>Subject: Re: [Mono-list] ADO.NET Provider Factory
>Date: 09 Nov 2002 12:15:52 +0100
>
>On Mon, 2002-11-04 at 06:37, Brian Ritchie wrote:
> > I've started work on the set of objects known as... "ADO.NET
> > Multiplexor Provider" in... http://www.go-mono.com/ado-net.html
> >
> > I'd appreciate the ADO.NET team to review this (and attached files)
> > before I commit things to CVS. I'm planning to put them under
> > /mcs/class/Mono.Data. Please note: connection strings will in attached
> > files will need to be updated to match your configuration. I've done
> > some basic testing of the code under MS.NET & Mono on Windows.
> >
>it looks ok to me. I would also add one thing though, which is a way to
>activate a given provider/connection string without having to know the
>provider to be used. That is, something like the ODBC (or libgda) data
>sources, on which you store, under a unique name, all parameteres needed
>for the connection to be established. Something like:
>
>IDbConnection cnc = ProviderFactory.CreateConnectionFromConfig
>("my_data_source");
>
>and then have, in the config file, an entry called "my_data_source"
>which contains the info for the provider and connection string to be
>used to open this given connection.
>
>Apart from that, it looks ok to me, so please commit as soon as you can.
>
>and sorry for the delay in answering, but I've been really busy these
>last weeks.
>
>cheers
>--
>Rodrigo Moya <[EMAIL PROTECTED]>


_________________________________________________________________
Help STOP SPAM with the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail


_______________________________________________
Mono-list maillist - [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list


_______________________________________________
Mono-list maillist - [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

_________________________________________________________________
Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail


_______________________________________________
Mono-list maillist - [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to