最好能分别进行:
(1)如何得到本地所有“用户DSN”?
(2)如何得到本地所有“系统DSN”?
(3)如何得到本地所有“文件DSN”?
(1)如何得到本地所有“用户DSN”?
(2)如何得到本地所有“系统DSN”?
(3)如何得到本地所有“文件DSN”?
解决方案 »
- (SDK)DestroyWindow()调用失败,请问谁可以告诉我原因???
- vc++的主要优势在哪啊
- 我在使用一个Picture控件,使用的是与bitmap关联,请问怎样设置bitmap的颜色mask,我是想让图片背景“透明”。
- 多线程访问同一个函数的互斥性问题
- 类的protected问题
- 请问有哪些方法可以统计线程之间创建顺序的序列号?
- 如何让VC6.0 的bitmap editor 支持256色以上的图标?
- 高手快来!如何关闭由ShellExecute打开的程序??(绝对给分!)
- 我想编写一个类似msdn帮助系统的界面,就是左边的框可以拖动,还加了可变属性页的,大家能不能提供的思路和方法啊?
- 请问哪里有下windows核心编程的源程序的地方?
- 请教:如何得到某个ODBC数据源的详细信息?比如:数据库(驱动)类型、服务器名称、连接的数据库,用户ID,等等。谢谢!
- ***用键盘钩子注入DLL的方法,在一个DIRECTX全屏游戏中弹出非模式对话框,但无法显示?****
控制面板里面管理工具中的"ODBC数据源"
Win??
控制面板里面就有吧
BOOL source::WriteDsn(FILE* fp)
{
ASSERT(fp==NULL);
CStringArray arrSystemDSN;
SQLCHAR szDSN[SQL_MAX_DSN_LENGTH+1];
SQLCHAR szDescription[100];
SQLRETURN retCode;
SQLHENV hEnv;
SQLUSMALLINT uDirection; //////////////////////////////////////////
//先提取系统数据源,存放在阿arrSystemDSN数组中
uDirection=SQL_FETCH_FIRST_SYSTEM;
retCode=::SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
if(retCode!=SQL_SUCCESS) return FALSE;
retCode=::SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); while(retCode==SQL_SUCCESS||retCode==SQL_SUCCESS_WITH_INFO)
{
retCode=SQLDataSources(hEnv,uDirection,
(UCHAR*)szDSN,
sizeof(szDSN),
NULL,(UCHAR*)szDescription,
sizeof(szDescription),NULL);
uDirection=SQL_FETCH_NEXT;
if(retCode!=SQL_SUCCESS_WITH_INFO&&retCode!=SQL_SUCCESS)
TRACE("SQLData Sources retuns:%d",retCode);
else
{
if(CString(szDescription)==CString("SQL Server"))
{
if(szDSN==CString("LocalServer")||szDSN==CString("MQIS")||szDSN==CString("Master_DSN"))
continue;
CString strDSN;
arrSystemDSN.Add(szDSN);
strDSN.Format("[#source=%s,,desc=%s,,user=sa,,code=sa,,type=SYSTEM_DSN#]\n",szDSN,szDescription,"","");
fprintf(fp,"%s",strDSN);
}
}
}
SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
////////////////////////////////////////////////
//根据arrSystemDSN江各个数据源的表结构到文件里
char *szUser="sa",*szPwd="sa";
char szDsn[256];
int iSysCount=arrSystemDSN.GetUpperBound()+1;
for(int j=0;j<iSysCount;j++) //data source
{
sprintf(szDsn,"%s",arrSystemDSN.GetAt(j));
if(!m_DB.Open(szDsn,szUser,szPwd))
{
TRACE("打开数据库失败 !");
return FALSE;
}
if(!m_DB.ListAllTable("'TABLE'"))
{
TRACE("枚举表失败!");
return FALSE;
}
int nIndex=0;
int nColType=0;
CString strTable,strTemp,strSourceType;
CStringArray arrRes;
nIndex=m_DB.m_arrTableName.GetUpperBound()+1;
for(int p=0;p<nIndex;p++)//table num
{
m_DB.DescTable(m_DB.m_arrTableName.GetAt(p));
m_DB.GetRowColNum(m_DB.m_arrTableName.GetAt(p));
strTable.Format("[#table=%s,,inof=%s,,recordnum=%d,,colnum=%d,,\n",
m_DB.m_arrTableName.GetAt(p),szDsn,m_DB.m_nRecordNum,m_DB.m_nColumnNum); int nColType;
int nflag=0,nflag1=0;
int nPriNum=m_DB.m_arrPrimaryKey.GetUpperBound()+1;
for(int k=0;k<m_DB.m_nColumnNum;k++)//column
{
if(m_DB.m_arrColNullable.GetAt(k)==CString("NO"))
nflag1=1;
else nflag1=0;
for(int q=0;q<nPriNum;q++)//primary key
{
if(k==(int)m_DB.m_arrPrimaryKey.GetAt(q))
{
nflag=1;
break;
}
else nflag=0;
}
nColType=GetColumnType(m_DB.m_arrColTypeName.GetAt(k));
//m_DB.m_arrColNullable.GetAt(i)
//列名<列类型>(列长度)[是否为空]'是否为主玛'
strTemp.Format("%s<%d>(%d)[%d]\'%d\',",m_DB.m_arrColName.GetAt(k),
nColType,m_DB.m_arrColDataLength.GetAt(k),nflag1,nflag);
strTable=strTable+strTemp;
}
strTable=strTable+CString("#]");
fprintf(fp,"%s\n",strTable);
} }
return TRUE;
}
主要用到函数
SQLDataSources