﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-公子周-随笔分类-数据库类</title><link>http://www.cppblog.com/zxl200406/category/19608.html</link><description>&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp--不乱于心，不困于情</description><language>zh-cn</language><lastBuildDate>Tue, 10 Jul 2012 14:13:59 GMT</lastBuildDate><pubDate>Tue, 10 Jul 2012 14:13:59 GMT</pubDate><ttl>60</ttl><item><title>ODBC连接sql数据库，支持创建数据库，创建表，查询，更新，删除</title><link>http://www.cppblog.com/zxl200406/archive/2012/07/10/182696.html</link><dc:creator>公子周</dc:creator><author>公子周</author><pubDate>Tue, 10 Jul 2012 14:13:00 GMT</pubDate><guid>http://www.cppblog.com/zxl200406/archive/2012/07/10/182696.html</guid><wfw:comment>http://www.cppblog.com/zxl200406/comments/182696.html</wfw:comment><comments>http://www.cppblog.com/zxl200406/archive/2012/07/10/182696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zxl200406/comments/commentRss/182696.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zxl200406/services/trackbacks/182696.html</trackback:ping><description><![CDATA[<div style="display: inline-block; "><div style="background-color: #eeeeee; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><font size="2">此代码，在网上有多份，但是很多不知道，创建数据库，创建表，查询，更新，删除</font><br /><div>class ODBC</div><div>{</div><div>private: &nbsp;</div><div><span style="white-space:pre">	</span>SQLHANDLE hEnv; &nbsp;</div><div><span style="white-space:pre">	</span>SQLHANDLE hDbc; &nbsp;</div><div><span style="white-space:pre">	</span>SQLHANDLE hStmt; &nbsp;</div><div><span style="white-space:pre">	</span>SQLRETURN retCode; &nbsp;</div><div><span style="white-space:pre">	</span>SQLINTEGER retErro; &nbsp;</div><div><span style="white-space:pre">	</span>SQLINTEGER rowCount; &nbsp;</div><div><span style="white-space:pre">	</span>SQLSMALLINT colCount; &nbsp;</div><div><span style="white-space:pre">	</span>vector&lt;string&gt; DBinfo;</div><div><span style="white-space:pre">	</span>bool bState; &nbsp;</div><div><span style="white-space:pre">	</span>string ws2s(const wstring&amp; ws);</div><div><span style="white-space:pre">	</span>wstring s2ws(const string&amp; s);</div><div><span style="white-space:pre">	</span>bool Close(); &nbsp;</div><div><span style="white-space:pre">	</span>bool IsOpen(); &nbsp;</div><div>public:</div><div><span style="white-space:pre">	</span>ODBC(void);</div><div><span style="white-space:pre">	</span>~ODBC(void);</div><div></div><div>public:</div><div><span style="white-space:pre">	</span>bool Connect(); &nbsp;</div><div>&nbsp; &nbsp;</div><div>&nbsp; &nbsp; int GetRowCount(){return rowCount;} &nbsp;</div><div>&nbsp; &nbsp; int GetColCount(){return colCount;} &nbsp;</div><div><span style="white-space:pre">	</span>void replace(string &amp;str,const char *string_to_replace,const char *new_string);</div><div><span style="white-space:pre">	</span>void replace(string &amp;str,const char *string_to_replace,int num);</div><div>&nbsp; &nbsp; vector&lt;string*&gt; ExecuteQueryVector(const char* pszSql); &nbsp;</div><div>&nbsp; &nbsp; int ExecuteQuery(const char* pszSql); &nbsp;//执行查询 &nbsp;</div><div>&nbsp; &nbsp; int ExecuteNonQuery(const char* pszSql);//执行非查询(更新或删除) &nbsp;</div><div></div><div><span style="white-space:pre">	</span>int createdatabase(string sql);//创建数据库,0为成功，-1为失败</div><div><span style="white-space:pre">	</span>int createtable(string sql);//创建数据表。0为成功,-1为失败,特别注意，语句不要带go字眼</div><div>};<br /><br /></div><div><div>ODBC::ODBC(void)</div><div>{</div><div><span style="white-space:pre">	</span>bState=false; &nbsp;</div><div><span style="white-space:pre">	</span>rowCount=colCount=0; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&amp;hEnv); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode!=SQL_SUCCESS)&amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro AllocHandle"&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode!=SQL_SUCCESS)&amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro AllocHandle"&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>SQLFreeHandle( SQL_HANDLE_DBC, hEnv ); &nbsp;</div><div><span style="white-space:pre">		</span>return; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&amp;hDbc); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode!=SQL_SUCCESS)&amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro AllocHandle"&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>SQLFreeHandle( SQL_HANDLE_DBC, hEnv ); &nbsp;</div><div><span style="white-space:pre">		</span>return; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div>}</div><div>ODBC::~ODBC(void)</div><div>{</div><div><span style="white-space:pre">	</span>Close();&nbsp;</div><div>}</div><div>bool ODBC::Close() &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>if(bState) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>SQLDisconnect(hDbc); &nbsp;</div><div><span style="white-space:pre">		</span>SQLFreeHandle(SQL_HANDLE_DBC,hDbc); &nbsp;</div><div><span style="white-space:pre">		</span>SQLFreeHandle(SQL_HANDLE_ENV,hEnv); &nbsp;</div><div><span style="white-space:pre">		</span>bState=false; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>return true; &nbsp;</div><div>} &nbsp;</div><div>bool ODBC::Connect() &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>string ip,user,password;</div><div><span style="white-space:pre">	</span>ip="127.0.0.1";</div><div><span style="white-space:pre">	</span>user="sa";</div><div><span style="white-space:pre">	</span>password="Nicholas@123";</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>if(bState==false) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>// retCode=SQLConnect(hDbc,(SQLCHAR*) pszDSN,SQL_NTS,(SQLCHAR*) pszUName,SQL_NTS,(SQLCHAR*) pszUPassword,SQL_NTS);</div><div><span style="white-space:pre">		</span>string strConnect="Driver={SQL Server};Database=test;Server=";</div><div><span style="white-space:pre">		</span>strConnect+=ip;</div><div><span style="white-space:pre">		</span>strConnect+=";uid=";</div><div><span style="white-space:pre">		</span>strConnect+=user;</div><div><span style="white-space:pre">		</span>strConnect+=";pwd=";</div><div><span style="white-space:pre">		</span>strConnect+=password;</div><div></div><div><span style="white-space:pre">		</span>short sDriverOutputLength;</div><div><span style="white-space:pre">		</span>wchar_t szDriverOutput[256];</div><div><span style="white-space:pre">		</span>retCode=SQLDriverConnect(hDbc,NULL,(SQLWCHAR *)s2ws(strConnect).c_str(),SQL_NTS, (SQLWCHAR &nbsp;*)szDriverOutput,256,&amp;sDriverOutputLength,SQL_DRIVER_NOPROMPT);</div><div><span style="white-space:pre">		</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">		</span>{ &nbsp;</div><div><span style="white-space:pre">			</span>cout&lt;&lt;"Erro Connect "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">			</span>SQLFreeHandle( SQL_HANDLE_DBC, hDbc ); &nbsp;</div><div><span style="white-space:pre">			</span>return false; &nbsp;</div><div><span style="white-space:pre">		</span>} &nbsp;</div><div><span style="white-space:pre">		</span>retCode=SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&amp;hStmt); &nbsp;</div><div><span style="white-space:pre">		</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">		</span>{ &nbsp;</div><div><span style="white-space:pre">			</span>cout&lt;&lt;"Erro Connect "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">			</span>SQLDisconnect( hDbc ); &nbsp;</div><div><span style="white-space:pre">			</span>SQLFreeHandle( SQL_HANDLE_DBC, hDbc); &nbsp;</div><div><span style="white-space:pre">			</span>return false; &nbsp;</div><div><span style="white-space:pre">		</span>} &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp; &nbsp; &nbsp;&nbsp;</div><div><span style="white-space:pre">	</span>bState=true; &nbsp;</div><div><span style="white-space:pre">	</span>cout&lt;&lt;"success!"&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">	</span>return true; &nbsp;</div><div></div><div>} &nbsp;</div><div>string ODBC::ws2s(const wstring&amp; ws)</div><div>{</div><div>_bstr_t t = ws.c_str();</div><div>char* pchar = (char*)t;</div><div>string result = pchar;</div><div>return result;</div><div>}</div><div>wstring ODBC::s2ws(const string&amp; s)</div><div>{</div><div>_bstr_t t = s.c_str();</div><div>wchar_t* pwchar = (wchar_t*)t;</div><div>wstring result = pwchar;</div><div>return result;</div><div>}</div><div>int ODBC::ExecuteQuery(const char* pszSql) &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>string strr=pszSql;</div><div><span style="white-space:pre">	</span>if(pszSql==NULL) &nbsp;</div><div><span style="white-space:pre">		</span>return 0; &nbsp;</div><div><span style="white-space:pre">	</span>cout&lt;&lt;"hStmt="&lt;&lt;hStmt&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLExecDirect(hStmt,(SQLWCHAR *)s2ws(strr).c_str(),SQL_NTS); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro ExecDirect "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>/* &nbsp;retCode=SQLRowCount(hStmt,&amp;rowCount); &nbsp;//不受select 影响。。&nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO))&nbsp;</div><div><span style="white-space:pre">	</span>{&nbsp;</div><div><span style="white-space:pre">	</span>cout&lt;&lt;"Erro RowCount "&lt;&lt;retCode&lt;&lt;endl;&nbsp;</div><div><span style="white-space:pre">	</span>return -1;&nbsp;</div><div><span style="white-space:pre">	</span>}*/ &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLNumResultCols(hStmt,&amp;colCount); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro ColCount "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>rowCount=0; &nbsp;</div><div><span style="white-space:pre">	</span>while(SQL_NO_DATA!=SQLFetch(hStmt)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>//cout&lt;&lt;pszBuf&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>rowCount++; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>SQLCancel(hStmt); &nbsp;</div><div><span style="white-space:pre">	</span>return rowCount; &nbsp;</div><div>} &nbsp;</div><div>int ODBC::ExecuteNonQuery(const char* pszSql) &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>rowCount=0; &nbsp;</div><div><span style="white-space:pre">	</span>if(pszSql==NULL) &nbsp;</div><div><span style="white-space:pre">		</span>return 0; &nbsp;</div><div><span style="white-space:pre">	</span>//cout&lt;&lt;"hStmt="&lt;&lt;hStmt&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLExecDirect(hStmt,(SQLWCHAR *)s2ws(pszSql).c_str(),SQL_NTS); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">	</span>//<span style="white-space:pre">	</span>cout&lt;&lt;"Erro ExecDirect "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLRowCount(hStmt,&amp;rowCount); &nbsp;&nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div>//<span style="white-space:pre">		</span>cout&lt;&lt;"Erro RowCount "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLNumResultCols(hStmt,&amp;colCount); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">	</span>//<span style="white-space:pre">	</span>cout&lt;&lt;"Erro ColCount "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div></div><div><span style="white-space:pre">	</span>SQLCancel(hStmt); &nbsp;</div><div><span style="white-space:pre">	</span>return rowCount; &nbsp;</div><div>} &nbsp;</div><div>vector&lt;string* &gt; &nbsp;ODBC::ExecuteQueryVector(const char* pszSql) &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>string strr=pszSql;</div><div><span style="white-space:pre">	</span>vector&lt;string* &gt; v; &nbsp;</div><div><span style="white-space:pre">	</span>if(pszSql==NULL) &nbsp;</div><div><span style="white-space:pre">		</span>return v; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLExecDirect(hStmt,(SQLWCHAR *)s2ws(strr).c_str(),SQL_NTS); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro ExecDirect "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return v; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div></div><div><span style="white-space:pre">	</span>retCode=SQLNumResultCols(hStmt,&amp;colCount); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>cout&lt;&lt;"Erro ColCount "&lt;&lt;retCode&lt;&lt;endl; &nbsp;</div><div><span style="white-space:pre">		</span>return v; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>rowCount=0; &nbsp;</div><div><span style="white-space:pre">	</span>SQLINTEGER colLen = 0; &nbsp;</div><div><span style="white-space:pre">	</span>SQLSMALLINT buf_len = 0; &nbsp;</div><div><span style="white-space:pre">	</span>SQLINTEGER colType = 0; &nbsp;</div><div></div><div><span style="white-space:pre">	</span>while(true) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp; &nbsp;</div><div><span style="white-space:pre">		</span>char sz_buf[256]; &nbsp;</div><div><span style="white-space:pre">		</span>char* pszBuf; &nbsp;</div><div><span style="white-space:pre">		</span>SQLINTEGER &nbsp;buflen; &nbsp;</div><div><span style="white-space:pre">		</span>string* rowData=new string[colCount+1]; &nbsp; &nbsp;</div><div><span style="white-space:pre">		</span>if(SQLFetch(hStmt)==SQL_NO_DATA) &nbsp;</div><div><span style="white-space:pre">		</span>{ &nbsp;</div><div><span style="white-space:pre">			</span>break; &nbsp;</div><div><span style="white-space:pre">		</span>} &nbsp;</div><div><span style="white-space:pre">		</span>for(int i=1;i&lt;=colCount;i++) &nbsp;</div><div><span style="white-space:pre">		</span>{ &nbsp;</div><div><span style="white-space:pre">			</span>SQLColAttribute(hStmt, i, SQL_DESC_NAME, sz_buf, 256, &amp;buf_len, 0); &nbsp;</div><div><span style="white-space:pre">			</span>SQLColAttribute(hStmt, i, SQL_DESC_TYPE, 0, 0, 0, &amp;colType); &nbsp;</div><div><span style="white-space:pre">			</span>SQLColAttribute(hStmt, i, SQL_DESC_LENGTH, NULL, 0, 0, &amp;colLen); &nbsp;</div><div><span style="white-space:pre">			</span>pszBuf=new char[colLen+1]; &nbsp;</div><div><span style="white-space:pre">			</span>pszBuf[0]='/0'; &nbsp;</div><div><span style="white-space:pre">			</span>SQLGetData(hStmt,i,SQL_C_CHAR,pszBuf,colLen,&amp;buflen); &nbsp;</div><div><span style="white-space:pre">			</span>rowData[i-1]=pszBuf; &nbsp;</div><div><span style="white-space:pre">		</span>} &nbsp;</div><div><span style="white-space:pre">		</span>v.push_back(rowData); &nbsp; &nbsp;&nbsp;</div><div><span style="white-space:pre">		</span>rowCount++; &nbsp;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>SQLCancel(hStmt); &nbsp;</div><div><span style="white-space:pre">	</span>return v; &nbsp;</div><div>} &nbsp;</div><div>bool ODBC::IsOpen() &nbsp;</div><div>{ &nbsp;</div><div><span style="white-space:pre">	</span>return bState; &nbsp;</div><div>} &nbsp;</div><div>void ODBC::replace(string &amp;str,const char *string_to_replace,const char *new_string)</div><div>{</div><div>&nbsp; &nbsp; // &nbsp; Find &nbsp; the &nbsp; first &nbsp; string &nbsp; to &nbsp; replace</div><div>&nbsp; &nbsp; int &nbsp; index &nbsp; = &nbsp; str.find(string_to_replace);</div><div>&nbsp; &nbsp; // &nbsp; while &nbsp; there &nbsp; is &nbsp; one</div><div>&nbsp; &nbsp; while(index &nbsp; != &nbsp; std::string::npos)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; Replace &nbsp; it</div><div>&nbsp; &nbsp; &nbsp; &nbsp; str.replace(index, &nbsp; strlen(string_to_replace), &nbsp; new_string);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; Find &nbsp; the &nbsp; next &nbsp; one</div><div>&nbsp; &nbsp; &nbsp; &nbsp; index &nbsp; = &nbsp; str.find(string_to_replace, &nbsp; index &nbsp; + &nbsp; strlen(new_string));</div><div>&nbsp; &nbsp; }</div><div>}&nbsp;</div><div>void ODBC::replace(string &amp;str,const char *string_to_replace,int num)</div><div>{</div><div><span style="white-space:pre">	</span>stringstream strStream;</div><div><span style="white-space:pre">	</span>strStream&lt;&lt;num;</div><div><span style="white-space:pre">	</span>string new_string=strStream.str();</div><div></div><div><span style="white-space:pre">	</span>int &nbsp; index &nbsp; = &nbsp; str.find(string_to_replace);</div><div><span style="white-space:pre">	</span>while(index &nbsp; != &nbsp; std::string::npos)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>str.replace(index, &nbsp; strlen(string_to_replace), &nbsp; new_string);</div><div><span style="white-space:pre">		</span>index &nbsp; = &nbsp; str.find(string_to_replace, &nbsp; index &nbsp; + &nbsp;new_string.length());</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div>//创建数据库</div><div>int ODBC::createdatabase(string sql)</div><div>{</div><div><span style="white-space:pre">	</span>string strr=sql;</div><div><span style="white-space:pre">	</span>if(sql=="") &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLExecDirect(hStmt,(SQLWCHAR *)s2ws(strr).c_str(),SQL_NTS); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>return -1;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>return 0;</div><div>}</div><div>//创建数据表。0为成功,-1为失败</div><div>int ODBC::createtable(string sql)</div><div>{</div><div><span style="white-space:pre">	</span>string strr=sql;</div><div><span style="white-space:pre">	</span>if(sql=="") &nbsp;</div><div><span style="white-space:pre">		</span>return -1; &nbsp;</div><div><span style="white-space:pre">	</span>retCode=SQLExecDirect(hStmt,(SQLWCHAR *)s2ws(strr).c_str(),SQL_NTS); &nbsp;</div><div><span style="white-space:pre">	</span>if((retCode != SQL_SUCCESS) &amp;&amp; (retCode != SQL_SUCCESS_WITH_INFO)) &nbsp;</div><div><span style="white-space:pre">	</span>{ &nbsp;</div><div><span style="white-space:pre">		</span>return -1;</div><div><span style="white-space:pre">	</span>} &nbsp;</div><div><span style="white-space:pre">	</span>return 0;</div><div>}<br /><br /><br />ODBC odbc;<br />odbc.connect();<br />//在实际使用的时候，<br /><br /><div>string sql="insert into [test].[dbo].[Exception] values ('0%','1%',2%,3%,'4%','5%','6%',7%);";</div><div>odbc.replace(sql,"0%",iter-&gt;first.c_str());//站点名称</div><div>odbc.replace(sql,"1%",iter_url_ip-&gt;first.c_str());//IP地址</div><div>odbc.replace(sql,"2%",iter_url_ip-&gt;second.ipcount);//IP访问次数</div><div>odbc.replace(sql,"3%",1);//攻击类型</div><div>odbc.replace(sql,"4%",_Map.getTime().c_str());//时间</div><div>odbc.replace(sql,"5%",sessiontop10.c_str());//session top 10</div><div>odbc.replace(sql,"6%",urltop10.c_str());//url top 10</div><div>odbc.replace(sql,"7%",0);//DDOS判定原因</div><div>odbc.ExecuteNonQuery(sql.c_str());</div></div></div></div></div><img src ="http://www.cppblog.com/zxl200406/aggbug/182696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zxl200406/" target="_blank">公子周</a> 2012-07-10 22:13 <a href="http://www.cppblog.com/zxl200406/archive/2012/07/10/182696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>