---
description: "SQLReadFileDSN Function"
title: "SQLReadFileDSN Function | Microsoft Docs"
ms.custom: ""
ms.date: "01/19/2017"
ms.prod: sql
ms.prod_service: connectivity
ms.reviewer: ""
ms.technology: connectivity
ms.topic: reference
apiname:
- "SQLReadFileDSN"
apilocation:
- "sqlsrv32.dll"
apitype: "dllExport"
f1_keywords:
- "SQLReadFileDSN"
helpviewer_keywords:
- "SQLReadFileDSN function [ODBC]"
ms.assetid: ead464aa-cdc3-47dd-a0c0-997711205d31
author: David-Engel
ms.author: v-daenge
---
# SQLReadFileDSN Function
**Conformance**
Version Introduced: ODBC 3.0
**Summary**
**SQLReadFileDSN** reads information from a File DSN.
## Syntax
```cpp
BOOL SQLReadFileDSN(
LPCSTR lpszFileName,
LPCSTR lpszAppName,
LPCSTR lpszKeyName,
LPSTR lpszString,
WORD cbString,
WORD * pcbString);
```
## Arguments
*lpszFileName*
[Input] Pointer to the data buffer containing the name of the .dsn file. A .dsn extension is appended to all file names that do not already have a .dsn extension. The value in *\*lpszFileName* must be a null-terminated string.
*lpszAppName*
[Input] Pointer to the data buffer containing the name of the application. This is "ODBC" for the ODBC section. The value in *\*lpszAppName* must be a null-terminated string.
*lpszKeyName*
[Input] Pointer to the data buffer containing the name of the key to be read. See "Comments" for reserved keywords. The value in *\*lpszAppName* must be a null-terminated string.
*lpszString*
[Output] Pointer to the data buffer containing the string associated with the key to be read.
If *\*lpszFileName* is a valid .dsn file name but the *lpszAppName* argument is a null pointer and the *lpszKeyName* argument is a null pointer, then *\*lpszString* contains a list of valid applications. If *\*lpszFileName* is a valid .dsn file name and *\*lpszAppName* is a valid application name, but the *lpszKeyName* argument is a null pointer, then *\*lpszString* contains a list of valid reserved keywords in the appropriate section of the DSN file, delimited by semicolons. If *\*lpszFileName* is a valid .dsn file name but *\*lpszAppName* is a null pointer and the *lpszKeyName* argument is a null pointer, then *\*lpszString* contains a list of the sections in the DSN file, delimited by semicolons.
*cbString*
[Input] Length of the *\*lpszString* buffer.
*pcbString*
[Output] Total number of bytes available to return in *\*lpszString*. If the number of bytes available to return is greater than or equal to *cbString*, the output string in *\*lpszString* is truncated to *cbString* minus the null-termination character. The *pcbString* argument can be a null pointer.
## Returns
The function returns TRUE if it is successful, FALSE if it fails.
## Diagnostics
When **SQLReadFileDSN** returns FALSE, an associated *\*pfErrorCode* value can be obtained by calling **SQLInstallerError**. The following table lists the *\*pfErrorCode* values that can be returned by **SQLInstallerError** and explains each one in the context of this function.
|*\*pfErrorCode*|Error|Description|
|---------------------|-----------|-----------------|
|ODBC_ERROR_GENERAL_ERR|General installer error|An error occurred for which there was no specific installer error.|
|ODBC_ERROR_INVALID_BUFF_LEN|Invalid buffer length|The *lpszString* argument was NULL.
The *cbString* argument was less than or equal to 0.|
|ODBC_ERROR_INVALID_PATH|Invalid install path|The path of the file name specified in the *lpszFileName* argument was invalid.|
|ODBC_ERROR_INVALID_REQUEST_TYPE|Invalid type of request|The *lpszAppName* argument was NULL, while the *lpszKeyName* argument was valid.|
|ODBC_ERROR_OUT_OF_MEM|Out of memory|The installer could not perform the function because of a lack of memory.|
|ODBC_ERROR_OUTPUT_STRING_TRUNCATED|Output string truncated|The string returned in *\*lpszString* was truncated because the value in *cbString* was less than or equal to the value in *\*pcbString*.|
|ODBC_ERROR_REQUEST_FAILED|Request failed|The keyword did not exist in the file DSN.|
## Comments
ODBC reserves the section name [ODBC] in which to store the connection information. The reserved keywords for this section are the same as those reserved for a connect string in **SQLDriverConnect**. (For more information, see the [SQLDriverConnect](../../../odbc/reference/syntax/sqldriverconnect-function.md) function description.)
Applications can use these reserved keywords to read the information in a File DSN. If an applications wants to find out the DSN-less connection string associated with a File DSN, it can call **SQLReadFileDSN** for any of the reserved connection string keywords in the [ODBC] section. The full connection string passed in a DSN-less connection is a combination of all of the keywords (reserved and driver-specific) in the [ODBC] section.
## Related Functions
|For information about|See|
|---------------------------|---------|
|Writing information to a File DSN|[SQLWriteFileDSN](../../../odbc/reference/syntax/sqlwritefiledsn-function.md)|