csdn_文档中心_appbuilder中进行直接odbc api数据库调用访问的基本方法!.htm

来自「csdn10年中间经典帖子」· HTM 代码 · 共 560 行 · 第 1/3 页

HTM
560
字号
            SQL_NULL_DATA)<BR>pData-&gt;m_aDepartment = 
            "";<BR>else<BR>pData-&gt;m_aDepartment = 
            pHostData[Count].m_aDepartment;<BR>if 
            (pHostData[Count].m_aBusinessInd == 
            SQL_NULL_DATA)<BR>pData-&gt;m_aBusiness = 
            "";<BR>else<BR>pData-&gt;m_aBusiness = 
            pHostData[Count].m_aBusiness;<BR>if 
            (pHostData[Count].m_aBusinessLevelInd == 
            SQL_NULL_DATA)<BR>pData-&gt;m_aBusinessLevel = 
            "";<BR>else<BR>pData-&gt;m_aBusinessLevel = 
            pHostData[Count].m_aBusinessLevel;<BR>if 
            (pHostData[Count].m_aWorkTypeInd == 
            SQL_NULL_DATA)<BR>pData-&gt;m_aWorkType = 
            "";<BR>else<BR>pData-&gt;m_aWorkType = 
            pHostData[Count].m_aWorkType;<BR>pData-&gt;m_dLeaveWorkDate.SetDateTime(pHostData[Count].m_dLeaveWorkDate.year,<BR>pHostData[Count].m_dLeaveWorkDate.month,<BR>pHostData[Count].m_dLeaveWorkDate.day,<BR>pHostData[Count].m_dLeaveWorkDate.hour,<BR>pHostData[Count].m_dLeaveWorkDate.minute,<BR>pHostData[Count].m_dLeaveWorkDate.second);<BR>if 
            (pHostData[Count].m_aEnageTypeInd == 
            SQL_NULL_DATA)<BR>pData-&gt;m_aEnageType = 
            "";<BR>else<BR>pData-&gt;m_aEnageType = 
            pHostData[Count].m_aEnageType;<BR>pData-&gt;m_dCreateDocDate.SetDateTime(pHostData[Count].m_dCreateDocDate.year,<BR>pHostData[Count].m_dCreateDocDate.month,<BR>pHostData[Count].m_dCreateDocDate.day,<BR>pHostData[Count].m_dCreateDocDate.hour,<BR>pHostData[Count].m_dCreateDocDate.minute,<BR>pHostData[Count].m_dCreateDocDate.second);<BR><BR>m_aData.Add(pData);<BR>}<BR>}<BR>if 
            (RowsFetched &lt; (UINT)m_nRowSetSize)<BR>break;<BR>}<BR>}<BR>delete 
            [] pRowStatus;<BR>delete [] pHostData;<BR>return 
            m_aData.GetSize();<BR>}<BR><BR>八、写数据库<BR>1、普通方法:<BR>CString 
            strSQL="INSERT INTO TABLE (FILE1,FILE2,FILE3) VALUES 
            (value1,value2,value3)"<BR><BR>long ExecuteSQL(SQLHDBC hdbc,CString 
            strSQL)<BR>{<BR>SQLRETURN ReturnCode;<BR>SQLHSTMT m_hstmt;<BR>BOOL 
            bReturn = FALSE;<BR>long nRowCount = 0;<BR>if (SQL_SUCCESS == 
            (ReturnCode = 
            ::SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&amp;m_hstmt)))<BR>{<BR>if 
            (SQL_SUCCESS == (ReturnCode = ::SQLExecDirect(m_hstmt, 
            (UCHAR*)((LPCTSTR)strSQL),SQL_NTS)))<BR>{<BR>bReturn = 
            TRUE;<BR>::SQLRowCount(m_hstmt,&amp;nRowCount);<BR>}<BR>}<BR>ReturnCode 
            = ::SQLFreeHandle(SQL_HANDLE_STMT,m_hstmt);<BR><BR>// if (!bReturn) 
            nRowCount = 0;<BR>return 
            nRowCount;<BR>}<BR>注意,要把字段赋为空,字符串、日期应是NULL,可以用下面的函数修改:<BR>CString 
            VerifySQLStr(CString strSQL)<BR>{<BR>int nLength = 
            strSQL.GetLength();<BR>int n1 = 0;//check '';<BR>int n2 = 0;<BR>int 
            m1 = 0;//check ##;<BR>int m2 = 0;<BR>for (int i = 0; i&lt; 
            nLength;i++)<BR>{<BR>if (strSQL[i] == 39)<BR>{<BR>n2 = i;<BR>if 
            (n2-n1 == 
            1)<BR>{<BR>strSQL.Delete(n1,2);<BR>strSQL.Insert(n1,"NULL");<BR>nLength 
            +=2;<BR>n1 = n2;<BR>}<BR>else<BR>{<BR>n1 = n2;<BR>}<BR>}<BR>if 
            (strSQL[i] == '#')<BR>{<BR>m2 = i;<BR>if (m2-m1 == 
            1)<BR>{<BR>strSQL.Delete(m1,2);<BR>strSQL.Insert(m1,"NULL");<BR>nLength 
            +=2;<BR>m1 = m2;<BR>}<BR>else<BR>{<BR>m1 = 
            m2;<BR>}<BR>}<BR>}<BR>return strSQL;<BR>}<BR><BR>2、参数绑定:<BR>bool 
            CCddataSet::Insert(pDB_CDDATA_SET_FIELDS pData, bool bFirstTime /* 
            true */)<BR>{<BR>RETCODE ReturnCode;<BR>CString 
            strSQLString;<BR>static FF_DB_CDDATA_SET_FIELDS 
            HostData;<BR><BR><BR>// Prepare the statement and bind the columns 
            once<BR>if 
            (bFirstTime)<BR>{<BR>memset(&amp;HostData,0,sizeof(HostData));<BR>SQLFreeStmt(m_hstmt, 
            SQL_CLOSE); // Close the cursor if any<BR>SQLFreeStmt(m_hstmt, 
            SQL_RESET_PARAMS); // Reset the statement 
            handle<BR>strSQLString.Format("INSERT INTO CDData 
            ("<BR>"NGUANGPAN,"<BR>"NWENJIAN,"<BR>"NCLASS,"<BR>"AWENJIAN,"<BR>"NSHANGJI,"<BR>"NSHUXING,"<BR>"ABEIZHU 
            )"<BR>"VALUES ("<BR>"?," // nGuangPan<BR>"?," // nWenJian<BR>"?," // 
            nClass<BR>"?," // aWenJian<BR>"?," // nShangJi<BR>"?," // 
            nShuXing<BR>"? )" // aBeiZhu<BR>); // end format<BR><BR>ReturnCode = 
            SQLPrepare(m_hstmt, (UCHAR*)((LPCTSTR)strSQLString),SQL_NTS);<BR>if 
            (ReturnCode != SQL_SUCCESS)<BR>{<BR>return 
            false;<BR>}<BR><BR>SQLBindParameter(m_hstmt,1, SQL_PARAM_INPUT, 
            SQL_C_SLONG, SQL_INTEGER, 
            0,<BR>0,&amp;HostData.m_Nguangpan,0,&amp;HostData.m_NguangpanInd 
            );<BR>SQLBindParameter(m_hstmt, 
            2,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER, 
            0,<BR>0,&amp;HostData.m_Nwenjian,0, &amp;HostData.m_NwenjianInd 
            );<BR>SQLBindParameter(m_hstmt,3,SQL_PARAM_INPUT, 
            SQL_C_SLONG,SQL_INTEGER, 
            0,<BR>0,&amp;HostData.m_Nclass,0,&amp;HostData.m_NclassInd 
            );<BR>SQLBindParameter(m_hstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,<BR>CDData_aWenJian_SIZE,0,HostData.m_Awenjian,0,&amp;HostData.m_AwenjianInd 
            );<BR>SQLBindParameter(m_hstmt,5,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,<BR>0,&amp;HostData.m_Nshangji, 
            0, &amp;HostData.m_NshangjiInd 
            );<BR>SQLBindParameter(m_hstmt,6,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER, 
            0,<BR>0, &amp;HostData.m_Nshuxing, 0,&amp;HostData.m_NshuxingInd 
            );<BR>SQLBindParameter(m_hstmt, 
            7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_VARCHAR,<BR>CDData_aBeiZhu_SIZE,0, 
            HostData.m_Abeizhu, 0,&amp;HostData.m_AbeizhuInd 
            );<BR><BR>}<BR><BR>// Move the data to host structure and execute 
            the statement<BR>HostData.m_Nguangpan = 
            pData-&gt;m_Nguangpan;<BR>HostData.m_Nwenjian = 
            pData-&gt;m_Nwenjian;<BR>HostData.m_Nclass = 
            pData-&gt;m_Nclass;<BR>HostData.m_AwenjianInd = 
            SQL_NTS;<BR>memcpy(HostData.m_Awenjian, pData-&gt;m_Awenjian, 
            CDData_aWenJian_SIZE);<BR>HostData.m_Nshangji = 
            pData-&gt;m_Nshangji;<BR>HostData.m_Nshuxing = 
            pData-&gt;m_Nshuxing;<BR>HostData.m_AbeizhuInd = 
            SQL_NTS;<BR>memcpy(HostData.m_Abeizhu, pData-&gt;m_Abeizhu, 
            CDData_aBeiZhu_SIZE);<BR><BR>ReturnCode = SQLExecute(m_hstmt);<BR>if 
            (ReturnCode != SQL_SUCCESS)<BR>{<BR>return false;<BR>}<BR><BR>return 
            true;<BR><BR>}<BR><BR><BR>九、其他操作:<BR><BR>1、检测SQL错误:<BR>void 
            DisplayError(SQLRETURN nResult, SWORD fHandleType, SQLHANDLE 
            handle)<BR>{<BR>UCHAR szErrState[SQL_SQLSTATE_SIZE+1]; // SQL Error 
            State string<BR>UCHAR szErrText[SQL_MAX_MESSAGE_LENGTH+1]; // SQL 
            Error Text string<BR>char szBuffer[1000];<BR>char 
            szDispBuffer[1000]; // Display Buffer<BR>// formatted Error text 
            Buffer<BR>SWORD wErrMsgLen; // Error message length<BR>long 
            dwErrCode; // Native Error code<BR>int iSize; // Display Error Text 
            size<BR>SQLRETURN nErrResult; // Return Code from 
            SQLGetDiagRec<BR>SWORD sMsgNum = 1;<BR>SWORD fFirstRun = 
            TRUE;<BR><BR>szBuffer[0] = '\0';<BR><BR>do<BR>{<BR>// continue to 
            bring messageboxes till all errors are displayed.<BR>// more than 
            one message box may be reqd. as err text has fixed<BR>// string 
            size.<BR><BR>// initialize display buffer with the string in error 
            text buffer<BR>strcpy(szDispBuffer, szBuffer);<BR><BR>// call 
            SQLGetDiagRec function with proper ODBC handles, repeatedly 
            until<BR>// function returns SQL_NO_DATA. Concatenate all error 
            strings<BR>// in the display buffer and display all 
            results.<BR>while ((nErrResult = SQLGetDiagRec(fHandleType, handle, 
            sMsgNum++,<BR>szErrState, &amp;dwErrCode, 
            szErrText,<BR>SQL_MAX_MESSAGE_LENGTH-1, &amp;wErrMsgLen))<BR>!= 
            SQL_NO_DATA) {<BR><BR><BR>if(nErrResult == SQL_ERROR &brvbar;&brvbar; nErrResult 
            == SQL_INVALID_HANDLE)<BR>break;<BR><BR>wsprintf(szBuffer, 
            SQLERR_FORMAT, (LPSTR)szErrState, dwErrCode, 
            (LPSTR)szErrText);<BR>iSize = strlen(szDispBuffer);<BR>if (iSize 
            &amp;&amp; (iSize+strlen(szBuffer)+1) &gt;= 1000)<BR>break;<BR>if 
            (iSize)<BR>strcat(szDispBuffer, "\n");<BR>strcat(szDispBuffer, 
            szBuffer);<BR>}<BR><BR>// display proper ERROR or WARNING message 
            with proper title<BR><BR>if (nResult == 
            SQL_SUCCESS_WITH_INFO)<BR>MessageBox(NULL, szDispBuffer, (fFirstRun? 
            SQLWRNMSGTITLE : SQLWRNCNTDTITLE),<BR>MB_OK &brvbar; 
            MB_ICONINFORMATION);<BR>else<BR>MessageBox(NULL, szDispBuffer, 
            (fFirstRun? SQLERRMSGTITLE : SQLERRCNTDTITLE),<BR>MB_OK &brvbar; 
            MB_ICONEXCLAMATION);<BR><BR>if (fFirstRun)<BR>fFirstRun = 
            FALSE;<BR>}<BR>while (!(nErrResult == SQL_NO_DATA &brvbar;&brvbar; nErrResult == 
            SQL_ERROR &brvbar;&brvbar; nErrResult == 
            SQL_INVALID_HANDLE));<BR>}<BR>分配和释放语句<BR><BR>任何与处理和传递SQL语句相关的SQL函数都要求一个有效的语句句柄作为<BR>参数。语句句柄很象环境或连接句柄,区别之处在于它引用SQL语句或者其它<BR>返回结果的ODBC函数。一个连接句柄可以与几个语句句柄相关连,但每一个<BR>语句句柄只能与一个连接句柄相关连。应用系统要想分配语句句柄,只需调用<BR>下面描述的SQLAllocStmt即可。 
            <BR><BR>SQLAllocStmt为语句句柄分配内存存储区,并将此句柄与连接句柄指定的<BR>连接联系在一起。应用系统必须先用SQLAllocStmt为SQL语句分配内存,然后<BR>才能提供引用某一特殊语句句柄的SQL语句。<BR><BR>SQLAllocStmt的语法如下:<BR>RETCODE 
            SQLAllocStmt(hdbc,phstmt)<BR>SQLAllocStmt的返回码为:<BR>SQL-SUCCESS<BR>SQL-SUCCESS-WITH-INFO<BR>SQL-INVALID-HANDLE<BR>SQL-ERROR 
            <BR><BR><BR>SQLFreeStmt<BR><BR>SQLFreeStmt完成以下动作:<BR>.停止任何与指定语句句柄相关的、当前正在处理的SQL语句;<BR>关闭任何与指定语句句柄相关的打开光标;<BR>舍弃所有未完成的结果。<BR>有选择的释放与指定语句句柄相关的所有资源;<BR><BR>SQLFreeStmt的语法为:<BR>RETCODE 
            SQLFreeStmt(hstmt,fOption) 
            <BR>SQLFreeStmt的返回码是:<BR>SQL-SUCCESS<BR>SQL-SUCCESS-WITH-INFO<BR>SQL-INVALID-HANDLE<BR>SQL-ERROR 
            <BR><BR>最后 
            <BR><BR>在我们的开发系统AppBuilder中你可以不必对上面的复杂的过程进行完整的了解,你也不必书写任何的调用代码,我们将这一切都自动为你产生,同时还和开发最终程序的界面融合在一起,一切都非常简单。为你的开发自动编写大量的代码,如果你需要看看,请到:www.ucancode.com中下在一个免费的版本。 
            <BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0 
width=770>
  <TBODY>
  <TR bgColor=#006699>
    <TD align=middle bgColor=#006699 id=white><FONT 
    color=#ffffff>对该文的评论</FONT></TD>
    <TD align=middle>
      <SCRIPT 
      src="CSDN_文档中心_AppBuilder中进行直接ODBC API数据库调用访问的基本方法!.files/readnum.htm"></SCRIPT>
    </TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TH bgColor=#006699 id=white><FONT 
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD>你没有登陆,无法发表评论。 请先<A 
      href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=290">登陆</A> 
      <A 
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>

<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
  <TBODY>
  <TR align=middle>
    <TD height=10 vAlign=bottom><A 
      href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A 
      href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A 
      href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A 
      href="http://www.csdn.net/english">English</A> </TD>
    <TD align=middle rowSpan=3><A 
      href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG 
      border=0 height=48 
      src="CSDN_文档中心_AppBuilder中进行直接ODBC API数据库调用访问的基本方法!.files/biaoshi.gif" 
      width=40></A></TD></TR>
  <TR align=middle>
    <TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
  <TR align=middle>
    <TD vAlign=top><FONT face=Verdana>Copyright &copy; CSDN.net, Inc. All rights 
      reserved</FONT></TD></TR>
  <TR>
    <TD height=15></TD>
    <TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>

⌨️ 快捷键说明

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