在C语言使用ODBC访问Excel,用SQLDriverConnect方法连接数据源连接字符需要哪些参数?

Python08

在C语言使用ODBC访问Excel,用SQLDriverConnect方法连接数据源连接字符需要哪些参数?,第1张

"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:

1. 在StdAfx.h文件中加入:

#include <afxdb.h>

#include <odbcinst.h>

2. 通过ODBC直接创建Excel文件并在表中插入数据(暂定文件名:Demo.xls)

//创建并写入Excel文件

void CRWExcel::WriteToExcel()

{

CDatabase database

CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"// Excel安装驱动

CString sExcelFile = "c:\\demo.xls" // 要建立的Excel文件

CString sSql

TRY

{

// 创建进行存取的字符串

sSql.Format("DRIVER={%s}DSN=''''FIRSTROWHASNAMES=1READONLY=FALSECREATE_DB=\"%s\"DBQ=%s",

sDriver, sExcelFile, sExcelFile)

// 创建数据库 (既Excel表格文件)

if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )

{

// 创建表结构(姓名、年龄)

sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)"

database.ExecuteSQL(sSql)

// 插入数值

sSql = "INSERT INTO demo (Name,Age) VALUES (''徐景周'',26)"

database.ExecuteSQL(sSql)

sSql = "INSERT INTO demo (Name,Age) VALUES (''徐志慧'',22)"

database.ExecuteSQL(sSql)

sSql = "INSERT INTO demo (Name,Age) VALUES (''郭徽'',27)"

database.ExecuteSQL(sSql)

}

// 关闭数据库

database.Close()

}

CATCH_ALL(e)

{

TRACE1("Excel驱动没有安装: %s",sDriver)

}

END_CATCH_ALL

}

3. 通过ODBC直接读取Excel文件(暂定文件名:Demo.xls)

// 读取Excel文件

void CRWExcel::ReadFromExcel()

{

CDatabase database

CString sSql

CString sItem1, sItem2

CString sDriver

CString sDsn

CString sFile = "Demo.xls" // 将被读取的Excel文件名

// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"

sDriver = GetExcelDriver()

if (sDriver.IsEmpty())

{

// 没有发现Excel驱动

AfxMessageBox("没有安装Excel驱动!")

return

}

// 创建进行存取的字符串

sDsn.Format("ODBCDRIVER={%s}DSN=''''DBQ=%s", sDriver, sFile)

TRY

{

// 打开数据库(既Excel文件)

database.Open(NULL, false, false, sDsn)

CRecordset recset(&database)

// 设置读取的查询语句.

sSql = "SELECT Name, Age "

"FROM demo "

"ORDER BY Name "

// 执行查询语句

recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly)

// 获取查询结果

while (!recset.IsEOF())

{

//读取Excel内部数值

recset.GetFieldValue("Name ", sItem1)

recset.GetFieldValue("Age", sItem2)

// 移到下一行

recset.MoveNext()

}

// 关闭数据库

database.Close()

}

CATCH(CDBException, e)

{

// 数据库操作产生异常时...

AfxMessageBox("数据库错误: " + e->m_strError)

}

END_CATCH

}

4. 获取ODBC中Excel驱动的函数

CString CRWExcel::GetExcelDriver()

{

char szBuf[2001]

WORD cbBufMax = 2000

WORD cbBufOut

char *pszBuf = szBuf

CString sDriver

// 获取已安装驱动的名称(涵数在odbcinst.h里)

if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))

return ""

// 检索已安装的驱动是否有Excel...

do

{

if (strstr(pszBuf, "Excel") != 0)

{

//发现 !

sDriver = CString(pszBuf)

break

}

pszBuf = strchr(pszBuf, ''\0'') + 1

}

while (pszBuf[1] != ''\0'')

return sDriver

}

注意添加头文件! 还有就是数据源一定的配一下。因为无论是access 还是sql等其他数据库,它们在安装过程中就给服务器机器安装和配置了数据源。要想使用功能,还的花点心思!

粗略的看了一下,应该是SQLConnenct参数传递有问题吧。每个字符串后面跟的不是字符串的长度,而是表示字符串形式的宏定义,如SQL_NTS,表示NULL terminated string,就是以NULL结尾的字符串。你把里面的strlen都换成SQL_NTS试试。

odbc数据源是用来进行从网站到数据库之间的连接提供一个方便的桥梁,当用户的数据需要在网页前台上进行显示的时候这就要用到odbc数据源,让网站能够调用后台的数据库中的数据....在控制面板里,选择管理工具---odbc数据源选择驱动安装,你的数据库可以是oracle,或者acess,或者sql等,odbc数据源中都提供了相关的驱动程序,选择你的数据库的类型,进行你的驱动的安装,就可以了.....