⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connect.c

📁 MySQL的ODBC接口程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	client_flag|=CLIENT_NO_SCHEMA;
  if (dbc->flag & FLAG_DEBUG)
    mysql_debug("d:t:S:O,c::\\myodbc.log");
  DBUG_PRINT("info",("MyODBC Version %s  Options: %d",DRIVER_VERSION,
		     dbc->flag));
  if (dbc->flag & FLAG_BIG_PACKETS)
    max_allowed_packet=~0L;

  /* If no DB, use DSN as database name */
  if (!lpsetupdlg->aAttr[KEY_DB].szAttr[0])
  {
    strmov(lpsetupdlg->aAttr[KEY_DB].szAttr,
	   lpsetupdlg->aAttr[KEY_DSN].szAttr);
  }
  if (!mysql_real_connect(&dbc->mysql,lpsetupdlg->aAttr[KEY_SERVER].szAttr,
			  lpsetupdlg->aAttr[KEY_USER].szAttr,
			  lpsetupdlg->aAttr[KEY_PASSWORD].szAttr,
			  lpsetupdlg->aAttr[KEY_DB].szAttr,
			  dbc->port,NullS,client_flag))
  {
    if (maybe_prompt && !fPrompt)
    {
      fPrompt=TRUE;
      goto retry;
    }
    strmov(dbc->sqlstate,"S1000");
    GlobalUnlock(hglbAttr);
    GlobalFree(hglbAttr);
    DBUG_RETURN(SQL_ERROR);
  }
  dbc->dsn=my_strdup(lpsetupdlg->aAttr[KEY_DSN].szAttr,MYF(MY_WME));
  dbc->database=my_strdup(lpsetupdlg->aAttr[KEY_DB].szAttr,MYF(MY_WME));
  dbc->server=my_strdup(lpsetupdlg->aAttr[KEY_SERVER].szAttr,MYF(MY_WME));
  dbc->user=my_strdup(lpsetupdlg->aAttr[KEY_USER].szAttr,MYF(MY_WME));
  dbc->password=my_strdup(lpsetupdlg->aAttr[KEY_PASSWORD].szAttr,MYF(MY_WME));

  GlobalUnlock(hglbAttr);
  GlobalFree(hglbAttr);
  DBUG_RETURN(SQL_SUCCESS);
#endif /* IS NOT UNIX */

#ifdef _UNIX_
  UCHAR FAR *connstrin=NULL;
  char *KEY_DSN=NULL;
  char *KEY_SERVER=NULL;
  char *KEY_USER=NULL;
  char *KEY_PASSWORD=NULL;
  char *KEY_PORT=NULL;
  char *KEY_OPTION=NULL;
  char *KEY_DB=NULL;
  char *KEY_SOCKET=NULL;

  char *tok[9];
  char *tok2=NULL;
  char *tok3=NULL;
  int i;
  uint client_flag=0;

  BOOL    fPrompt = FALSE;
  DBC FAR *dbc=(DBC FAR*) hdbc;
  DBUG_ENTER("SQLDriverConnect");
  DBUG_PRINT("enter",("fDriverCompletion: %d",fDriverCompletion));

  if ((szConnStrIn == NULL) || (!cbConnStrIn) ||
      ((cbConnStrIn == SQL_NTS) && (!szConnStrIn[0])))
    fPrompt = TRUE;
  else
  {
    /* Check connection string for completeness. */
    /* Prompt if not all params			 */

    connstrin=(UCHAR FAR *) my_strdup(szConnStrIn,MYF(MY_WME));

    tok[0]=my_strtok(connstrin,";");
    for (i=1 ; i <= 7 ; i++)
      tok[i]=my_strtok(NULL,";");
    tok[i]=NULL;

    for (i=0 ; tok[i] ; i++)
    {
      if (tok2 = my_strtok(tok[i], "="))
      {
	if (strcmp("DSN", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_DSN = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_DSN);
	    KEY_DSN = NULL;
	  }
	}

	if (strcmp("DB", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_DB = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_DB);
	    KEY_DB = NULL;
	  }
	}

	if (strcmp("UID", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_USER = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_USER);
	    KEY_USER = NULL;
	  }
	}

	if (strcmp("PWD", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_PASSWORD = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_PASSWORD);
	    KEY_PASSWORD = NULL;
	  }
	}

	if (strcmp("SERVER", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_SERVER = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_SERVER);
	    KEY_SERVER = NULL;
	  }
	}

	if (strcmp("PORT", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_PORT = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_PORT);
	    KEY_PORT = NULL;
	  }
	}
	if (strcmp("SOCKET", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_SOCKET = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_SOCKET);
	    KEY_PORT = NULL;
	  }
	}

	if (strcmp("OPTION", tok2) == 0)
	{
	  if ((tok3 = my_strtok(NULL, "\0")) && tok3[0])
	    KEY_OPTION = (char*) my_strdup(tok3, MYF(MY_WME));
	  else
	  {
	    x_free(KEY_OPTION);
	    KEY_PORT = NULL;
	  }
	}
      }
    }

    if (!KEY_DB && KEY_DSN)
      KEY_DB = (char*) my_strdup(KEY_DSN, MYF(MY_WME));

    if (!KEY_SERVER)
      KEY_SERVER = (char*) my_strdup("localhost", MYF(MY_WME));

    if (!KEY_PORT)
      KEY_PORT = (char*) my_strdup("3306", MYF(MY_WME));

    if (!KEY_SOCKET)
      KEY_SOCKET = (char*) my_strdup("", MYF(MY_WME));

    if (!KEY_USER)
      KEY_USER = (char*) my_strdup("dummy", MYF(MY_WME));

    if (!KEY_PASSWORD)
      KEY_PASSWORD = (char*) my_strdup("", MYF(MY_WME));

    if (!KEY_OPTION)
      KEY_OPTION = (char*) my_strdup("0", MYF(MY_WME));

    if (fDriverCompletion == SQL_DRIVER_PROMPT ||
	((fDriverCompletion == SQL_DRIVER_COMPLETE ||
	  fDriverCompletion == SQL_DRIVER_COMPLETE_REQUIRED) &&
	 (!KEY_DSN)))
      fPrompt = TRUE;
  }
  if (fPrompt)
  {
    DBUG_RETURN(set_error((DBC FAR*) hdbc,"S1000","No DSN entered",0));
  }

  if (szConnStrOut)
  {
    UCHAR FAR  *pos;
    pos=strxmov(szConnStrOut,
		"DSN=",KEY_DSN,
		";DB=",KEY_DB,
                ";SERVER=",KEY_SERVER,
                ";UID=",KEY_USER,
                ";PWD=",KEY_PASSWORD,
                ";PORT=",KEY_PORT,
                ";SOCKET=",KEY_SOCKET,
                ";OPTION=",KEY_OPTION,
		";",NullS);
    *pcbConnStrOut=(int) (pos-szConnStrOut);
  }
  dbc->flag=atoi(KEY_OPTION);
  dbc->port=atoi(KEY_PORT);
  if (dbc->flag & FLAG_FOUND_ROWS)
    client_flag=CLIENT_FOUND_ROWS;
  if (dbc->flag & FLAG_NO_SCHEMA)
	client_flag|=CLIENT_NO_SCHEMA;
  if (dbc->flag & FLAG_DEBUG)
    mysql_debug("d:t:S:O,/tmp/myodbc.log");
  DBUG_PRINT("info",("MyODBC Version %s  Options: %d",DRIVER_VERSION,
		     dbc->flag));
  if (dbc->flag & FLAG_BIG_PACKETS)
    max_allowed_packet=~0L;
#if MYSQL_VERSION_ID >= 32200
  if (!mysql_real_connect(&dbc->mysql,KEY_SERVER,
			  KEY_USER,
			  KEY_PASSWORD,
                          KEY_DB,
                          dbc->port,
			  KEY_SOCKET[0] ? KEY_SOCKET : NullS,
			  client_flag))
  {
    strmov(dbc->sqlstate,"S1000");
    DBUG_RETURN(SQL_ERROR);
  }
#else
  if (!mysql_real_connect(&dbc->mysql,KEY_SERVER,
			  KEY_USER,
			  KEY_PASSWORD,
                          dbc->port,
			  KEY_SOCKET[0] ? KEY_SOCKET : NullS,
			  client_flag))
  {
    strmov(dbc->sqlstate,"S1000");
    DBUG_RETURN(SQL_ERROR);
  }
  if (mysql_select_db(&dbc->mysql,KEY_DB))
  {
    strmov(dbc->sqlstate,"08004");
    mysql_close(&dbc->mysql);
    DBUG_RETURN(SQL_ERROR);
  }
#endif
  dbc->dsn=my_strdup(KEY_DSN,MYF(MY_WME));
  dbc->database=my_strdup(KEY_DB,MYF(MY_WME));
  dbc->server=my_strdup(KEY_SERVER,MYF(MY_WME));
  dbc->user=my_strdup(KEY_USER,MYF(MY_WME));
  dbc->password=my_strdup(KEY_PASSWORD,MYF(MY_WME));

  x_free(KEY_DSN);
  x_free(KEY_DB);
  x_free(KEY_SERVER);
  x_free(KEY_USER);
  x_free(KEY_PASSWORD);
  x_free(KEY_PORT);
  x_free(KEY_SOCKET);
  x_free(KEY_OPTION);
  x_free(connstrin);

  DBUG_RETURN(SQL_SUCCESS);
#endif /* IS UNIX */
}


RETCODE SQL_API SQLBrowseConnect(HDBC hdbc,UCHAR FAR *szConnStrIn,
				 SWORD cbConnStrIn,
				 UCHAR FAR *szConnStrOut,SWORD cbConnStrOutMax,
				 SWORD FAR *pcbConnStrOut)
{
  DBUG_ENTER("SQLBrowseConnect");
  DBUG_RETURN(set_error((DBC FAR*) hdbc,"IM001","This doesn't work yet",4000));
}


RETCODE SQL_API SQLDisconnect(HDBC hdbc)
{
  LIST *list_element,*next_element;
  DBC FAR *dbc=(DBC FAR*) hdbc;

  for (list_element=dbc->statements ; list_element ;
       list_element=next_element)
  {
    next_element=list_element->next;
    SQLFreeStmt((STMT FAR*) list_element->data,SQL_DROP);
  }
  mysql_close(&dbc->mysql);
  return SQL_SUCCESS;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -