How To Connect To SQL Server From Visual FoxPro
How To Connect To SQL Server From Visual FoxPro
by Sayed Geneidy
In Microsoft public newsgroups, I've noticed a recent increase in the number of questions that deal with
how to connect from Visual Foxpro to SQL Server, and the problems related to making this connection. So
I've decided to write this article to cover such an important topic.
There are two functions that can be used to establish a connection with the a remote SQL Server from
Visual FoxPro:
SQLConnect()
SQLStringConnect()
There are two ways to use the SQLConnect() function to connect to a remote data source, such as SQL
Server. The first requires that you supply the name of a data source as defined in the ODBC Data Source
Administrator applet of the Control Panel.
The following example creates a connection to a remote server using the ODBCNorthwind DSN:
LOCAL hConn
The second way to use SQLConnect() is to supply the name of a Visual FoxPro connection that was
created using the create connection command. The CREATE CONNECTION command stores the metadata
that Visual FoxPro needs to connect to a remote data source.
The following example creates a Visual FoxPro connection named Northwind and then connects to the
database described by the connection:
LOCAL hConn
DATASOURCE "ODBCNorthwind" ;
USERID "sa" ;
PASSWORD ""
hConn = SQLConnect("Northwind")
SQLStringConnect() Function
The other function that can be used to establish a connection to a remote data source, such as SQL
Server, is SQLStringConnect(). Unlike SQLConnect(), SQLStringConnect() requires a single parameter, a
string of semicolon-delimited options that describes the remote data source and optional connections
settings.
The valid options are determined by the requirements of the ODBC driver. Specific requirements for each
ODBC driver can be found in that ODBC driver's documentation.
The following table lists some commonly used connection string options for SQL Server:
Option Description
DSN References an ODBC DSN.
Driver Specifies the name of the ODBC driver to use.
Server Specifies the name of the SQL Server to connect to.
UID Specifies the login ID or username.
PWD Specifies the password for the given login ID or username.
Database Specifies the initial database to connect to.
APP Specifies the name of the application making the connection.
WSID The name of the workstation making the connection.
Specifies whether the login is being validated by the Windows
Trusted_Connection
NT Domain.
Not all of the options listed in the above table have to be used for each connection.
For instance, if you specify the Trusted_Connection option and connect to SQL Server using NT
Authentication, there is no reason to use the UID and PWD options since SQL Server would invariably
ignore them. The following code demonstrates some examples of using SQLStringConnect().
Note: You can use the name of your server instead of the string.
LOCAL hConn
UID=sa;PWD=;Database=Northwind")
hConn = SQLStringConnect("DSN=ODBCNorthwind;UID=sa;PWD=;Database=Northwind")
hConn =
SQLStringConnect("DSN=ODBCNorthwind;Database=Northwind;Trusted_Connection=Yes")
Visual FoxPro returns error 1526 for all errors against a remote data source. The fifth element of the
array returned by AERROR() contains the remote data source-specific error.
#define MB_OKBUTTON 0
#define MB_STOPSIGNICON 16
LOCAL hConn
IF (hConn < 0)
AERROR(laError)
MESSAGEBOX( ;
laError[2], ;
MB_OKBUTTON + MB_STOPSIGNICON, ;
ENDIF
It is very important that a connection be released when it is no longer needed by the application because
connections consume valuable resources on the server, and the number of connections may be limited by
licensing constraints.
You break the connection to the remote data source using the SQLDisconnect() function. SQLDisconnect()
takes one parameter, the connection handle created by a call to either SQLConnect() or
SQLStringConnect(). SQLDisconnect() returns a 1 if the connection was correctly terminated and a
negative value if an error occurred.
The following example establishes a connection to SQL Server, and then drops the connection:
LOCAL hConn,lnResult
UID=sa;PWD=;Database=Northwind")
lnResult = SQLDisconnect(hConn)
IF lnResult < 0
MESSAGEBOX("Disconnect failed")
If the parameter supplied to SQLDisconnect() is not a valid connection handle, Visual FoxPro will return a
run-time error (#1466). Currently there is no way to determine whether a connection handle is valid
without attempting to use it.
To disconnect all SQL pass through connections, you can pass a value of zero to SQLDisconnect().
Published with the express written permission of the author. Copyright 2003.