| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- * Microsoft SQL Server Provider
- <ul>
- <li>ADO.NET Provider for Microsoft SQL Server 7/2000 databases</li>
- <li>Exists in namespace System.Data.SqlClient and assembly System.Data</li>
-
- <li>Created by Tim Coleman</li>
-
- <li>Used the <a href="http://www.freetds.org/">FreeTDS</a> and
- <a href="http://jtds.sourceforge.net/">jTDS</a> projects as resources.</li>
-
- <li>Implemented in 100% C#</li>
-
- <li>Is similar to the Mono.Data.TdsClient and Mono.Data.SybaseClient providers.</li>
-
- <li>Requires the assembly Mono.Data.Tds.dll which implements the TDS protocol in 100% C#.</li>
-
- <li>Uses TDS Protocol Version 7.0</li>
-
- <li>Bugs with Mono or the data provider should be reported
- in Mono's Bugzilla <a href="http://bugzilla.ximian.com/">here</a>. If you
- do not have Bugzilla user account, it is free
- and easy to
- create one <a href="http://bugzilla.ximian.com/createaccount.cgi">here</a>.</li>
-
- </ul>
- ** Current Status
- <ul>
- <li>Thanks to Sebastien Pouliot, we now have NT Authentication (Integrated Security) support. This support was
- added after the release of Mono 0.29. So, you either get it from cvs or wait for the Mono 0.30 release.</li>
- <li>Able to connect to Microsoft SQL Server 7/2000 databases via SQL Server authentication and NT Authentication.</li>
-
- <li>Connection pooling works.</li>
-
- <li>Stored Procedures work.</li>
-
- <li>Parameters work.</li>
-
- <li>Prepare works.</li>
-
- <li>SQL commands can be executed
- via ExecuteNonQuery() of a SqlCommand.</li>
-
- <li>SQL aggregates can be executed and a single row and single column
- result can be retrieved via ExecuteScalar() of a SqlCommand</li>
-
- <li>SQL queries can be executed via ExecuteReader() and results
- can be retrieved via SqlDataReader.</li>
-
- <li>a DataTable with schema info about a result can be gotten via GetSchemaTable()
- in a SqlDataReader</li>
-
- <li>XML can be read via ExecuteXmlReader in a SqlCommand.</li>
-
- <li>Data can be filled in a DataTable in a DataSet via a SqlDataAdapter</li>
-
- <li>Uses TDS Protocol Version 7.0</li>
-
- <li>Works in the SQL# command-line and GTK# GUI version</li>
- </ul>
- ** Action plan
- <ul>
- <li>Connection timeouts is being developed now</li>
-
- <li>Needs more testing</li>
-
- <li>Start work on TDS Protocol Version 8.0 support</li>
-
- <li>Add support for .NET 1.2 and 2.0 and Microsoft SQL Server (Yukon) support</li>
- </ul>
- ** Testing
- <ul>
- <li>Have a working mono and mcs installed</li>
-
- <li>Have access to a Microsoft SQL Server database
- or either download it:
- <ul>
- <li><a href="http://www.microsoft.com/sql/default.asp">Microsoft SQL Server</a></li>
- </ul>
- </li>
-
- <li><b>IMPORTANT:</b> If using Microsoft SQL Server 2000, make sure
- you are using at least Service Pack 3 for Microsoft SQL Server 2000. If using
- MSDE 2000, make sure you have the special Service Pack 3 for MSDE 2000. You
- can get it from <a href="http://www.microsoft.com/sql/downloads/2000/sp3.asp">here</a></li>
-
- <li>For those that only have MSDE installed. You can change the authentication mode
- from Windows Only Authentication to SQL Server and Windows Authentications (also knows as Mixed-mode authentication)
- via the <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q322336&sd=tech#4">registry</a></li>. It is
- the LoginMode you need to change. By default,
- MSDE is installed with Windows Only Authentication. For SqlClient to work with MSDE, you will
- need to change the setting.</a>
-
- <li>If using MSDE, you might need to create a new user with password. Give
- this user access to various databases in this MSDE instance. Also, for each
- database, give this new user at least SELECT access to the various tables you want
- to retrieve data from.</li>
-
- <li>If you have Enterprise Manager, you can easily change the authentication mode
- for both MSDE and Microsoft SQL Server. To change the authentication mode in
- Enterprise Mananger, select the instance, right-click on it, and select properites.
- The SQL Server properties dialog for that instance will pop up. Choose the Security
- tab. Change the authentication from Windows Only to SQL Server and Windows. If
- the instance of your database does not show up in Enterprise Manager, Register first
- by selecting the Action menu and choosing New SQL Server Registration.</li>
- <li>Located at mcs/class/System.Data/Test is a test for System.Data.SqlClient
- named SqlTest.cs and you could use this as a basis for your test.</li>
-
- <li>Mono's SqlClient does not support trusted connections
- nor integrated security. You can not use this when connecting. You need
- to explicitly use a User ID and Password
- authenticated by SQL Server.</li>
-
- <li>Has a connection string format for SQL Server Authentication:
- <pre>
- Server=hostname;Database=databaseName;User ID=userid;Password=password
- </pre>
- </li>
- <li>Has a connection string format for NT Authentication:
- <pre>
- Server=hostname;Database=databaseName;User ID=windowsUserid;Password=windowsPassword;Integrated Security=SSPI
- </pre>
- </li>
- <li>The Server part can be used three ways:
-
- <table border=1>
- <tr>
- <td><b>Server Definition</b></td> <td><b>Example</b></td>
- </tr>
-
- <tr>
- <td>hostname</td> <td>Server=MYHOST</td>
- </tr>
-
- <tr>
- <td>hostname,port</td> <td>Server=MYHOST,1433</td>
- </tr>
-
- <tr>
- <td>hostname\\instance</td> <td>Server=MYHOST\\NETSDK</td>
- </tr>
- </table>
- </li>
-
- <li>C# Example:
- <pre>
- using System;
- using System.Data;
- using System.Data.SqlClient;
-
- public class Test
- {
- public static void Main(string[] args)
- {
- string connectionString =
- "Server=localhost;" +
- "Database=pubs;" +
- "User ID=myuserid;" +
- "Password=mypassword;";
- IDbConnection dbcon;
- dbcon = new SqlConnection(connectionString);
- dbcon.Open();
- IDbCommand dbcmd = dbcon.CreateCommand();
- string sql =
- "SELECT fname, lname " +
- "FROM employee";
- dbcmd.CommandText = sql;
- IDataReader reader = dbcmd.ExecuteReader();
- while(reader.Read()) {
- string FirstName = (string) reader["fname"];
- string LastName = (string) reader["lname"];
- Console.WriteLine("Name: " +
- FirstName + " " + LastName);
- }
- // clean up
- reader.Close();
- reader = null;
- dbcmd.Dispose();
- dbcmd = null;
- dbcon.Close();
- dbcon = null;
- }
- }
- </pre>
- </li>
- <li>Building C# Example:
- <ul>
- <li>Save the example to a file, such as, TestExample.cs</li>
- <li>Build on Linux:
- <pre>
- mcs TestExample.cs -r System.Data.dll
- </pre>
- </li>
- <li>Build on Windows via Cygwin:
- <pre>
- mono C:/cygwin/home/MyHome/mono/install/bin/mcs.exe \
- TestExample.cs -r System.Data.dll
- </pre>
- </li>
- </ul>
- </li>
- <li>Running the Example:
- <pre>
- mono TestExample.exe
- </pre>
- </li>
- </ul>
|