Als je via Google zoekt naar hoe je verbinding moet maken met een Access-, SqlCe-, MySQL-, of Microsoft SQL Server database, vanuit ASP.NET, PHP of ASP.NET, dan vind je steeds heel oude connectiestrings voor ODBC of OLE DB. Dat is vervelend, want vaak werken ze niet goed meer. In deze post geef ik je een aantal nieuwere connectiestrings.

Zoals gezegd, hier vind je een aantal nieuwe ODBC en OLE DB connectiestrings voor ASP.NET, ASP, PHP met SQL Server en MySQL. Ik laat Access-, en SqlCe-databases achterwege, die zijn verouderd en moeten niet meer gebruikt worden.

In de voorbeelden wordt uitgegaan van de versies die ik op dit moment beschikbaar heb.

ASP.NET connectiestring naar SQL Server

Als je vanuit ASP.NET wilt verbinden met een Microsoft SQL Server database, dan kun je daarvoor de namespace System.Data.SqlClient gebruiken. Een eenvoudige manier is:

string strConnection = "Data Source=sql.example.com;" +
"User ID=db-user;" +
"Password=P4ssword;" +
"Initial Catalog=examplecom;";
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open()

Net als met MySQL Connector/ODBC hieronder kun je fouten, of excepties, afvangen en/of debug-informatie printen met een try{} catch(){} blok:

try {
objConnection.Open();
con_open.Text="Connection opened successfully.<br />";
objConnection.Close();
con_close.Text="Connection closed.<br />";
}
catch (Exception e) {
con_open.Text="Connection failed to open.<br />";
con_close.Text=e.ToString();
}

Leer hoe je de verbinding tussen Umbraco en SQL Server beveiligt met SSL/TLS.

ASP.NET connectiestring naar MySQL met Connector/NET

Met ASP.NET kun je natuurlijk op meer dan één manieren verbinding maken met MySQL. In mijn testscripts kies ik vrijwel altijd voor om:

  1. niet gebruik te maken van de serverbreed geïnstalleerde MySQL Connector/NET.
  2. een connectiestring in een C# mysql-test.aspx script op te geven i.p.v in het web.config-bestand.

Om ervoor te zorgen dat je niet gebruikmaakt van de serverbreed geïnstalleerde versie moet je die versie overschrijven in jouw web.configbestand. Een serverbreed geïnstalleerde MySql.Data connector kan bijvoorbeeld een verouderde versie zijn waarmee jouw website niet functioneert. Daarom definieer je dan jouw eigen versie, voor de zekerheid.

Gebruik de volgende code met de web.config configuratie daaronder. Vergeet niet om namespaces MySql.Data en MySql.Data.MySqlClient te importeren.

Vergeet ook niet om jouw MySql.Data.dll en MySql.Data.MySqlClient.dll bestanden te plaatsen in de ~/bin map.

string connStr = "server=mysql.example.com;" +
"user=db-user;database=examplecom;" +
"port=3306;password=P4ssword;SslMode=REQUIRED;pooling=true;";
MySqlConnection conn = new MySqlConnection(connStr);

Op Saotn.org heb ik een volledig MySql.Data testscript voor ASP.NET.

MySql.Data web.config configuratie

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="false">
<assemblies>
<add assembly="MySql.Data, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
<add assembly="MySql.Web, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
<!-- # Alleen nodig als je ook Entity Framework 6.0 (EF6) met MySql.Data.Entity gebruikt -->
<!--
<add assembly="MySql.Data.Entity, Version=6.10.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
-->
</assemblies>
</compilation>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d"/>
<bindingRedirect oldVersion="1.0.0.0-6.10.6.0" newVersion="6.10.6.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="MySql.Web" publicKeyToken="c5687fc88969c44d"/>
<bindingRedirect oldVersion="1.0.0.0-6.10.6.0" newVersion="6.10.6.0"/>
</dependentAssembly>
<!-- # Alleen nodig als je ook Entity Framework 6.0 (EF6) met MySql.Data.Entity gebruikt -->
<!--
<dependentAssembly>
<assemblyIdentity name="MySql.Data.Entity" publicKeyToken="c5687fc88969c44d"/>
<bindingRedirect oldVersion="1.0.0.0-6.10.6.0" newVersion="6.10.6.0"/>
</dependentAssembly>
-->
</assemblyBinding>
</runtime>
</configuration>

ASP.NET connectiestring naar MySQL via Connector/ODBC

Met een ODBC verbinding naar MySQL kun je de web.config configuratie acherwege laten en de volgende code-first connectiestring maken.

string MyConString = "DRIVER={MySQL ODBC 8.0 Unicode Driver};" +
"Provider=MSDASQL;" +
"SERVER=mysql.example.com;" +
"DATABASE=examplecom;" +
"UID=db-user;" +
"PASSWORD=P4ssword;" +
"SslMode=REQUIRED;";
// Connect to MySQL using MyODBC
OdbcConnection MyConnection = new OdbcConnection(MyConString);
MyConnection.Open();

In tegenstelling tot Connector/MySQL kun je met ODBC ook weer de verbindingsgegevens opvragen, en kun je fouten (exceptions) afvangen.

Ter illustratie, nadat MyConnection.Open(); is uitgevoerd:

Response.Write( "Connection Information:<br /> ");
Response.Write( "Connection String:" + MyConnection.ConnectionString + "<br /> ");
Response.Write( "Connection Timeout:" + MyConnection.ConnectionTimeout + "<br /> ");
Response.Write( "Database:" + MyConnection.Database + "<br /> ");
Response.Write( "DataSource:" + MyConnection.DataSource + "<br /> ");
Response.Write( "Driver:" + MyConnection.Driver + "<br /> ");
Response.Write( "ServerVersion:" + MyConnection.ServerVersion + "<br /> ");
catch (OdbcException MyOdbcException) {
for (int i=0; i < MyOdbcException.Errors.Count; i++) {
Response.Write( "ERROR #" + i + "<br />" +
"Message: " + MyOdbcException.Errors[i].Message + "<br />" +
"Native: " + MyOdbcException.Errors[i].NativeError.ToString() + "<br />" +
"Source: " + MyOdbcException.Errors[i].Source + "<br />" +
"SQL: " + MyOdbcException.Errors[i].SQLState + "<br /> ");
}
}

ASP en SQL Server ODBC connectiestring

In de post SQL injection tegengaan met prepared statements vind je al een voorbeeld om vanuit ASP met MS SQL Server te verbinden. Dat stukje zal ik hier niet kopieren, maar het iets anders weergeven.

Plaats het volgende in jouw ASP-script als connectiestring:

Set SqlConn = Server.CreateObject("ADODB.Connection")
' Microsoft SQL Server ODBC Driver
Connstr = Connstr & "DRIVER={SQL Server};"
Connstr = Connstr & "DATABASE=examplecom;"
Connstr = Connstr & "SERVER=sql.example.com;"
' open de verbinding in het formaat: Connstr, "gebruikrsnaam", "wachtwoord"
SqlConn.Open Connstr, "db-user", "P4ssword"

Maak gebruik van ADODB.Command om queries te beveiligen tegen SQL-injectie met prepared statements.

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SSL Security error

Als bovenstaande ODBC-connectiestring de volgende foutmelding geeft:

[Microsoft][ODBC SQL Server Driver][DBNETLIB]SSL Security error

Of

TCP Provider: An existing connection was forcibly closed by the remote host.

Dan is de ODBC SQL Server driver die je gebruikt te oud. Het kan zijn dat support voor TLS 1.0 is uitgeschakeld op de server. Verander in dat geval DRIVER={SQL Server} in DRIVER={ODBC Driver 17 for SQL Server}.

Deze driver moet dan uiteraard wel op het systeem geïnstalleerd zijn.

ASP en OLE DB Driver for SQL Server (MSOLEDBSQL) connectiestring voor SQL Server

Er zijn twee OLE DB drivers: Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL) en Microsoft OLE DB Provider for SQL Server (SQLOLEDB). In pricipe wil je alleen deze eerste gebruiken!

Dim SqlConn
Set SqlConn = Server.CreateObject("ADODB.Connection")
Connstr = "Provider=MSOLEDBSQL;"
Connstr = Connstr & "DATABASE=examplecom;"
Connstr = Connstr & "SERVER=sql.example.com;"
' open de verbinding in het formaat: Connstr, "gebruikrsnaam", "wachtwoord"
SqlConn.Open Connstr, "db-user", "P4ssword"

Microsoft OLE DB Provider for SQL Server (SQLOLEDB)

Dim SqlConn
Set SqlConn = Server.CreateObject("ADODB.Connection")
Connstr = "Provider=SQLOLEDB;"
Connstr = Connstr & "DATABASE=examplecom;"
Connstr = Connstr & "SERVER=sql.example.com;"
' open de verbinding in het formaat: Connstr, "gebruikrsnaam", "wachtwoord"
SqlConn.Open Connstr, "db-user", "P4ssword"

Het gebruik van deze OLE DB Provider wordt afgeraden!

ASP connectiestring naar MySQL via Connector/ODBC

Het voorbeeld om vanuit ASP te verbinden met MySQL, via Connector/ODBC, is niet heel veel anders dan de ASP.NET variant. In jouw scripts kun je het volgende gebruiken:

Set sConn = Server.CreateObject("ADODB.Connection")
sconn.Open "Provider=MSDASQL;" & _
"DRIVER={MySQL ODBC 8.0 Unicode Driver};" &_
"Server=sql.example.com;" & _
"Database=examplecom;" & _
"UID=db-user;" & _
"PWD=P4ssword;" &_
"SSLMODE=REQUIRED;"

PHP conneciestring met SQL Server (bonus!)

Microsoft biedt een native PHP module om met SQL Server verbinding te maken: sqlsrv. Daarnaast kun je ook prima PHP Data Objects (PDO) gebruiken, mocht je dat willen.

Let altijd op met connectiestrings met daarin een versienummer; na een update van de driver werkt die vaak niet meer. Een versieloze connectiestring heeft dan ook de voorkeur.

PHP sqlsrv_connect()

Als je PHP’s sqlsrv_connect() wilt gebruiken, dan is dit een voorbeeld:

$connection = sqlsrv_connect( 'sql.example.com', array(
'UID' => 'examplecom',
'PWD' => 'P4ssword',
'Database' => 'examplecom',
'CharacterSet' => 'UTF-8',
'TraceOn' => true,
'Encrypt' => true,
'TrustServerCertificate' => true,
) );

Je kunt het resultaat van $connection opvragen met:

if ( false === $connection ) {
exit( print_r( sqlsrv_errors(), true ) );
}

PHP Data Objects (PDO)

Met PHP Data Objects (PDO) verbindt je op één van de volgende manieren:

// 1
$dsn = 'sqlsrv:Server=sql.example.com;Database=examplecom;'
$pdo = new PDO( $dsn, 'db-user', 'db-password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
) );
// 2
$dsn = 'odbc:SERVER=sql.example.com;DATABASE=examplecom;DRIVER={ODBC Driver 13 for SQL Server};'
$pdo = new PDO( $dsn, 'db-user', 'db-password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
) );
// 3
$dsn = 'sqlsrv:Server=sql.example.com;Database=examplecom;DRIVER={ODBC Driver 13 for SQL Server};'
$pdo = new PDO( $dsn, 'db-user', 'db-password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
) );
// 4
$dsn = 'odbc:SERVER=sql.example.com;DATABASE=examplecom;DRIVER={ODBC Driver 17 for SQL Server};'
$pdo = new PDO( $dsn, 'db-user', 'db-password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
) );
// 5
$dsn = 'sqlsrv:Server=sql.example.com;Database=examplecom;DRIVER={ODBC Driver 17 for SQL Server};'
$pdo = new PDO( $dsn, 'db-user', 'db-password', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
) );

Je vindt meer informatie op de PHP pagina’s ODBC and DB2 Functions (PDO_ODBC) en Microsoft SQL Server Functions (PDO_SQLSRV).

Show 1 Comment

1 Comment

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *