X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=web%2Fado-net;h=0095d79ef79996374030641fce45c5c8a01272ac;hb=a17adea98d0e3b4b130ba2d3c65521c26e7f32a7;hp=87d2f1f86d213356bf1c31afed86d4b785fa5281;hpb=506ccff8d59db68b1b5f04bd928d895f5c520bd7;p=mono.git
diff --git a/web/ado-net b/web/ado-net
index 87d2f1f86d2..0095d79ef79 100644
--- a/web/ado-net
+++ b/web/ado-net
@@ -1,285 +1,198 @@
* ADO.NET
- The coordinator for the ADO.NET implementation is Rodrigo Moya, with
- the collaboration of Daniel
- Morgan.
-
-* Action plan
-
- The current plan to implement ADO.NET is as follows:
-
- Step 1: SqlClient:
-
-
- * Implementation of System.Data.SqlClient based on
- the PostgreSQL C API.
-
- * Once the System.Data.SqlClient code is functional and
- is usable by other people, we willl move it to
- System.Data.PostgreSQL, and will convert the existing
- System.Data.SqlClient to be just a wrapper around
- System.Data.PostgreSQL.
-
-
-
- Step 2: OleDB:
-
- * On Unix systems: System.Data.OleDb will use LibGDA as its
- engine.
-
- LibGDA is the data access engine that is used by
- Gnome-Db (only libgda, not libgnomedb at all).
-
- * On Windows systems: System.Data.OleDb will use OLE-DB as
- its engine.
-
-
- Step 3: System.Data.SqlClient Providers:
+** Data Access in Mono
+
+
+ - Today, our goal is to be compatible with .NET 1.1 and .NET 1.0. We also would like
+ to extend data access beyond what is included with .NET 1.0 and .NET 1.1,
+ such as, include access to more databases, such as, PostgreSQL and MySQL,
+ but also provide classes that help in creating data source-agnostic code, such as,
+ Mono.Data.ProviderFactory.
+
+ - In the future, we would like to be compatible with .NET 1.2. This includes features
+ like ObjectSpaces
+
+
-
- * System.Data.SqlClient will then become a generic
- proxy for binding to other SQL implementations other
- than PostgreSQL (MySQL on Unix/Windows; MS SQL on
- Window; Interbase on Unix/Windows). Others are welcomed.
-
+** Bugs and Feature Requests
- Step 4: Other System.Data providers:
+
-
- * The idea in MS .NET System.Data seems to be to have
- a managed provider for each supported DBMS. So, apart
- from System.Data.OleDb (generic) and System.Data.SqlClient,
- we'll need to have System.Data.ODBC, System.Data.MySQL,
- System.Data.Oracle, System.Data.PostgreSQL, etc. Others,
- of course, are welcomed.
-
+ - Bugs with Mono or any data provider in Mono should be reported
+ in Mono's Bugzilla here. If you
+ do not have a Bugzilla user account, it is free
+ and easy to create
+ one here.
-* Current Status
+ - Any requests for new features or missing functionality
+ can entered as a bug in Bugzilla too
- We are able to do simple CREATE TABLE, DROP TABLE, INSERT, and
- DELETE SQL commands using the ExecuteNonQuery method in SqlCommand.
+
- We are also able to do simple aggregate functions,
- ie, count(), sum(), avg(), min(), and
- max() in a simple SELECT SQL query using ExecuteSecalar() now.
+** ADO.NET Data Providers
- We are also able to retrieve data with a simple SELECT SQL query
- using ExecuteReader() which returns a SqlDataReader. We are able to
- GetSchemaTable() get the meta data about the table columns. We are able
- to Read() to get each row from the result set. We are able to get
- String data (char, bpchar (character), text, varchar), Int16 (int2 or smallint),
- and Int32 (int4 or integer), Int64 (int8 or bigint). More data types will
- follow later on.
-
- Parameters are not working nor has stored procedures been tested - but they will be.
+Mono has many ADO.NET Data Providers to get you connected:
+
+
+
+External Projects that have created ADO.NET Providers that work on Mono:
+
+
+
+ - Firebird Interbase
is a
+ Firebird SQL Managed data provider. It can be used with Interbase databases too. It
+ is written in 100%C# and does not require a client library. Works on .NET and Mono.
+ - Npgsql is a
+ PostgreSQL Managed data provider written
+ in 100% C#, does not require a client library, and works on .NET and Mono
+ - MySQLNet is a
+ MySQL Managed data provider written in 100% C#, does not
+ require a client library, and works on .NET and Mono
+
+
+** Tools
+
+Some tools that can be used for ADO.NET and other technologies (ASP.NET, XML, etc).
+
+
+ - sqlsharp.exe
+
+ - SQL# is a command line query tool included with Mono to enter and execute SQL statements
+
+
+ - xsd.exe
+
+ - XML Schema Definition tool
+
+ - XDR to XSD - used to generate an XML schema from an XDR (XML Data Reduced schema) file.
+ XDR was used by Microsoft prior to XSD becoming a W3C recommendation. So, this needs
+ to be supported for legacy reasons
+ - XML to XSD - used to generate an XML schema from an XML file
+ - XSD to DataSet - used to generate DataSet classes from an XSD schema file. The
+ DataSet classes created can then be used with XML data
+ - XSD to Classes - used to generate classes from an XSD schema file. The
+ classes created can be used with System.XML.Serialization.XMLSerializer
+ to read and write XML code that follows the schema
+ - Classes to XSD - used to generate an XML schema
+ from type(s) in a assembly file. The
+ XML schema created by the tool defines the XML format used
+ by System.XML.Serialization.XMLSerializer
+
+
+
+
+
+
+** Extra Classes in Mono ADO.NET
+
+ An ADO.NET Provider Factory
+ was created by Brian Ritchie. The
+ Provider Factory is a way to dynamically create
+ connections, commands, parameters, and data adapters based on configuration
+ information.
- A lot of functionality in System.Data is missing, but the infrastructure is
- starting to come together.
-
- To compile that test program, you need:
-
- On Linux
-
+** Database Access from ASP.NET
- * update your mono sources.
-
- * get the .dll's and mcs.exe built on windows, and put them on your
- linux machine.
-
- * compile the test program along with the System.Data.Common and
- System.Data.SqlClient files.
+ - Take a look at xsp in cvs and look at the examples in test: dbpage1.aspx
+ and dbpage2.aspx:
+
+ - Notice that the namespace System.Data is imported via import
+ - A NameValueCollection is gotten using ConfigurationSettings.AppSetings. These
+ settings are gotten from the file server.exe.config which is a XML file. The XML
+ file has a section appSettings. In the appSettings section, you have keys
+ for DBProviderAssembly, DBConnectionType, and DBConnectionString.
+
+ - DBProviderAssembly is the assembly of the ADO.NET provider.
+ For example:
+ "ByteFX.Data"
+ - DBConnectionType is the System.Type of the class that
+ implements System.Data.IDbConnection that is found
+ in the DBProviderAssembly.
+ For example:
+ "ByteFX.Data.MySqlConnection"
+ - DBConnectionString is the ConnectionString to set to the
+ IDbConnection object to use in opening a connection to a data source.
+ For Example:
+ "hostaddr=127.0.0.1;user=monotest;password=monotest;dbname=monotest"
+
+ - The function GetConnectionData() gets the database provider assembly, connection type,
+ and connection string parameters if they exist; otherwise, it uses default values. This is
+ done during the loading of the web page.
+ - With the connection parameters, the assembly is loaded, the connection type is verified that
+ it implements IDbConnection and an instance of the class can be created, creates a instance
+ of the class, sets the connection string, and opens the connection.
+
+
-* Testing
-
- In order to test System.Data.SqlClient, you will need to have
- access to a remote PostgreSQL DBMS, or you will have to install
- one locally. PostgreSQL is the DBMS used for the initial
- implementation of System.Data.SqlClient.
-
- Why? Because it is open source, has a client
- library that is easy to use, PostgreSQL is easy to install
- using the Cygwin install program, not difficult to setup after
- installation, and it runs under: Linux,
- Windows (via cygwin and ipc-daemon), Unix, and
- others. This allowed us to create the
- System.Data functionality in Mono much quicker.
+** Testing
+
+
+ - Testing connection-oriented classes are done
+ via the provider specific tests
+ found in the mcs source at mcs/class
+
+
+ Name |
+ Assembly / Namespace |
+ Test |
+
+
+
+ Microsoft SQL Server |
+ System.Data / System.Data.SqlClient |
+ SqlTest.cs at System.Data/Test |
+
+
+
+ PostgreSQL (Npgsql) |
+ Npgsql / Npgsql |
+ *.cs at Npgsql/Test |
+
+
+
+ Oracle (Mono) |
+ System.Data.OracleClient / System.Data.OracleClient |
+ TestOracleClient.cs at System.Data.OracleClient/Test |
+
+
+
+ ODBC (Mono) |
+ System.Data.Odbc / System.Data |
+ OdbcTest.cs (to connect to MS SQL Server)at System.Data/Test |
+
+
+
- If you plan on using a remote PostgreSQL DBMS Server,
- than you will need to have the PostgreSQL client software on your
- local computer that includes libpq.so (pq.dll on Windows).
-
- Installation instructions for PostgreSQL DBMS:
-
- On Linux
-
-
- * TODO
-
- * It easier to install PostgreSQL on Linux than Windows.
-
- On Windows
-
-
- * Use the cygwin installer to install the PostgreSQL DBMS. It is
- found in the database category.
-
- * Read the file postgres-x.x.README at /usr/doc/Cygwin and read
- the requirements to install PostgreSQL. Those requirements
- are included with cygwin except cygipc. A default installtion
- of cygwin does not install everything you will need, so on the
- safe side, just include everything when installing cygwin.
-
- The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
+ - Testing non-connection classes are
+ done via mono's modified version of NUnit.
+
+ - To run all the NUnit tests for Mono, you need the mcs source. cd to the root
+ of the mcs source. To run it:
+
+
+ - If you just want to run the NUnit tests for System.Data, you would cd into
+ the mcs source at class/System.Data/Test and run it:
+
+
+
+
- * Once cygwin has installed PostgreSQL on your computer,
- read the file FAQ_MSWIN which is available
- in /usr/doc/postgres-x.x\FAQ_MSWIN
-
- The -x.x in postgres-x.x is the version of your PostgreSQL DBMS.
-
- Important notes from this file are:
-
- * Point 2. - Install the latest cygipc package,
- available at
- http://www.neuro.gatech.edu/users/cwilson/cygutils/V1.1/cygipc/
-
- The cygipc package contains the ipc-daemon you will need
- to run before you can
- run the PostgreSQL DBMS Server daemon (postmaster) or run
- initdb which initializes the PostgreSQL database.
-
- * Point 3. The Cygwin bin directory has to be placed in
- the path before the Windows program directories,
- for example, C:\cygwin\bin
-
- My own note, in the Windows control panel, I set
- the environment variables PATH to my cygwin /usr/local/bin,
- /usr/bin, and /bin. I also set my LD_LIBRARY_PATH to
- /usr/local/lib and /usr/lib. For example:
-
- PATH=c:\cygwin\usr\local\bin;c:\cygwin\usr\bin;c:\cygwin\bin;
- LD_LIBRARY_PATH=c:\cygwin\usr\local\lib;c:\cygwin\usr\lib;
-
- * Point 4. Start the ipc-daemon that came with the cygipc package. There
- are two ways to do this: run it from the command line as:
- ipc-daemon &
-
- or you can set it up as a Windows service. See the
- file cygrunsrv.README at /usr/doc/Cygwin on how to do this
- for ipc-daemon and postmaster. Note the
- troubleshooting section at the end of
- the cygrunsrv.README file.
-
- To install ipc-daemon as a service,
- you just have to run 'ipc-daemon --install-as-service' (--remove-as-service)
- and then run 'net start ipc-daemon'
-
- * Read the installation.html file
- at /usr/doc/postgresql-x.x/html/installation.html
-
- In this file, you will run the following commands:
-
- * mkdir /usr/local/pgsql/data
- * initdb -D /usr/local/pgsql/data
- * postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
- * createdb test
- * psql test
-
- When you need to connect to the database,
- you will need ipc-daemon and postmaster running. Start ipc-daemon
- before any of the command above.
-
- psql is a command-line PostgreSQL client tool to
- enter and run SQL commands and queries.
-
- If there is no database user named postgres, create a user named
- postgres with the following SQL command in the client tool psql:
- plsql test
- create user postgres with password 'fun2db';
- The only reason I say this is so you can easily use the System.Data tests
- without having to change the database, userid, etc.
-
-
-
- In the path mcs/class/System.Data/Test
- there is a PostgreSQL test program named
- PostgreTest.cs. Thanks goes to Gonzalo for creating the original
- PostgreSQL test.
- To use it to test System.Data, you
- modify the file to your PostgreSQL database
- connection requirements:
-
- dbname is the database, ie, test
- host is the hostname of the PostgreSQL DBMS Server to connect to
- user is the username, ie, someuser
- password is the password, ie, mypass1234
-
- The connection string is in OLE-DB connection string format. Internally,
- SqlConnection converts this to the PostgreSQL connection string format.
-
- OLE-DB: "host=localhost;dbname=test;user=joe;password=smoe"
- PostgreSQL: "host=localhost dbname=test user=joe password=smoe"
-
- Note that OLE-DB includes the semicolons while PostgreSQL's connection
- string does not.
+
- To compile the PostgresTest.cs program, do:
- mcs PostgresTest.cs -r System.Data
-
- To run using mint, do:
- mint PostgresTest.exe
-
- To run using mono, do:
- mono PostgresTest.exe
-
- You should get something like:
-
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test
-$ mcs PostgresTest.cs -r System.Data
-
-Administrator@DANPC ~/mono/mcs/class/System.Data/Test
-$ mint PostgresTest.exe
- Postgres provider specific tests...
-
- Drop table:
-Error (don't worry about this one)
- Create table with all supported types:
-OK
- Insert values for all known types:
-OK
- Select values from the database:
- Get Schema.
-dt.Columns.Count: 6
-* Column Name: int2_value
- MaxLength: 2
- Type: System.Int16
-* Column Name: int4_value
- MaxLength: 4
- Type: System.Int32
-* Column Name: bigint_value
- MaxLength: 8
- Type: System.Int64
-* Column Name: char_value
- MaxLength: -1
- Type: System.String
-* Column Name: varchar_value
- MaxLength: -1
- Type: System.String
-* Column Name: text_value
- MaxLength: -1
- Type: System.String
-Row 0:
- Col 0: int2_value - -22
- Col 1: int4_value - 1048000
- Col 2: bigint_value - 123456789012345
- Col 3: char_value - This is a char
- Col 4: varchar_value - This is a varchar
- Col 5: text_value - This is a text
-Rows: 1
-Clean up...
- Drop table...
-OK
-