logo资料库

C语言连接SQL数据库例子.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
c语言用vc连接sql server 2000
//##########################save.cpp##############
//##########################list.cpp##############
连接到 SAMPLE 数据库,查询 LASTNAME 为 JOHNSON 的 FIRSTNAME 信息。 INCLUDE SQLCA; (1) "util.h" #include #include #include #include #include EXEC SQL main() { EXEC SQL BEGIN DECLARE char char char EXEC SQL EXEC SQL CONNECT EXEC SQL firstname[13]; userid[9]; passwd[19]; SECTION; (2) END DECLARE SECTION; TO sample; (3) SELECT name = %s\n", INTO :firstname (4) LASTNAME = 'JOHNSON';(4) "First FIRSTNME FROM employee WHERE printf( EXEC SQL CONNECT RESET; (5) return } 上面是一个简单的静态嵌入 SQL 语句的应用程序。它包括了嵌入 SQL 的主要部分: (1)中的 include SQLCA 语句定义并描述了 SQLCA 的结构。SQLCA 用于应用程序和数据库之间 0; firstname ); 的通讯,其中的 SQLCODE 返回 SQL 语句执行后的结果状态。 (2)在 BEGIN DECLARE SECTION 和 END DECLARE SECTION 之间定义了宿主变量。 宿主变量可被 SQL 语句引用,也可以被 C 语言语句引用。它用于将程序中的数据通过 SQL 语句传给数据 库管理器,或从数 据库管理器接收查询的结果。在 SQL 语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做 CONNECT 操作,以连接到某一个数据库上。这时,应该保证数据 库实例已经启动。 (4)是一条选择语句。它将表 employee 中的 LASTNAME 为“JOHNSON”的行数据的 FIRSTNAME 查出,并将它放在 firstname 变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以 包含 update、insert 和 delete 语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式 SQL 语句都用 EXEC SQL 开始,表明它是一条 SQL 语句。这也是告诉预编 译器在 EXEC SQL 和“;”之间是嵌入 SQL 语句。如果一条嵌入式 SQL 语句占用多行,在 C 程序中可 以用续行符“\”。 c 语言用 vc 连接 sql server 2000 2009/11/02 09:34 [sql server ]
1.提取单条记录 //#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ //no_namespace,rename("EOF","adoEOF"),named_guids CoInitialize(NULL); _bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;" _ConnectionPtr m_pConnection(_uuidof(Connection)); m_pConnection->Open(varSource,"","",adModeUnknow); _RecordsetPtr m_pSet(_uuid(Recordset)); try { m_pSet->Open(%%1,m_pConnection.GetInterfacePtr() adOpenDynamic,adLockPessimistic,adCmdText); } catch(_com_error *e){ { AfxMessageBox(e->ErrorMessage()); return; } _variant_t var; CString %%2=""; long fldc=m_pSet->GetFields()->GetCount(); long i=0; try { m_pSet->MoveFirst(); if(!m_pSet->adoEOF) { for(i=0;iGetCollect((long)i); var.ChangeType(VT_BSTR); %%2+=var.bstrVal; %%2+=" "; } //m_pSet->MoveNext(); } } catch(_com_error *e){ AfxMessageBox(e->ErrorMessage()); delete e; } //m_pSet->MoveFirst(); CoUninitialize(NULL);
2.单值比较 //#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ //no_namespace,rename("EOF","adoEOF"),named_guids CoInitialize(NULL); _bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;" _ConnectionPtr m_pConnection(_uuidof(Connection)); m_pConnection->Open(varSource,"","",adModeUnknow); _RecordsetPtr m_pSet(_uuid(Recordset)); try { m_pSet->Open(%%1,m_pConnection.GetInterfacePtr() adOpenDynamic,adLockPessimistic,adCmdText); } catch(_com_error *e){ { AfxMessageBox(e->ErrorMessage()); return; } _variant_t var; try { m_pSet->MoveFirst(); if(!m_pSet->adoEOF) { var=m_pSet->GetCollect((long)0); var.ChangeType(VT_I2); int %%3=var.intVal; if(%%3==%%4) { %%5 } //m_pSet->MoveNext(); } catch(_com_error *e){ AfxMessageBox(e->ErrorMessage()); delete e; } //m_pSet->MoveFirst(); CoUninitialize(NULL); 3.显示表格 //#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ //no_namespace,rename("EOF","adoEOF"),named_guids
CoInitialize(NULL); _bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;" _ConnectionPtr m_pConnection(_uuidof(Connection)); m_pConnection->Open(varSource,"","",adModeUnknow); //打开属性为默认(adModeRead(只读),adModeWrite(可写), adModeReadWrite(可读写)等) _RecordsetPtr m_pSet(_uuid(Recordset)); try { HRESULT hr=m_pSet->Open(%%1,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText); } catch(_com_error *e){ AfxMessageBox(e->ErrorMessage()); } if(SUCCESSED(hr)) { //表打开成功 } FieldsPtr p_fields=m_pSet->Fields; FieldPtr p_field; _variant_t var_index; LPCSTR field_name; int index=0; _bstr_t bstr_field_name; int countfields=p_fields->GetCount(); CString *Column=new CString[countfields]; CListCtrl *pList=(CListCtrl*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA VERIFY(pList); pList->DeleteAllItems(); for(index=0;indexItem[var_index]; bstr_field_name=p_field->GetName(); field_name=(LPCSTR)bstr_field_name; Column[index]=field_name; int ColumnWidth=Column[index].GetLength()*15; pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth); } int i=0; _bstr_t vCol;
//pList->SetTextBkColor(RGB(122,200,122)); //pList->SetTextColor(RGB(0,0,200)); while(!m_pSet->adoEOF) { pList->Insert(i,atoi(i)); for(int j=0;jGetCollect((long)j); pList->SetItemText(i,j,vCol); } m_pSet->MoveNext(); i++; } CoUninitialize(NULL); C 语言与 SQL SERVER 数据库 1.使用 C 语言来操作 SQL SERVER 数据库,采用 ODBC 开放式数据库连接进行数据 的添加,修改,删除,查询等操作。 step1:启动 SQLSERVER 服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver step2:打开企业管理器,建立数据库 test,在 test 库中建立 test 表(a varchar(200),b varchar(200)) step3:建立系统 DSN,开始菜单 ->运行 ->odbcad32, 添加->SQL SERVER 名称:csql,服务器:HNHJ 使用用户使用登录 ID 和密码的 SQLSERVER 验证,登录 ID:sa,密码: 更改默认的数据库为:test ... 测试数据源,测试成功,即 DNS 添加成功。 2.cpp 文件完整代码 //##########################save.cpp########################## C 代码 1. #include 2. #include 3. #include
4. #include 5. #include 6. #include 7. #include 8. 9. sqlhenv henv = sql_null_henv; 10. sqlhdbc hdbc1 = sql_null_hdbc; 11. sqlhstmt hstmt1 = sql_null_hstmt; 12. 13. /* 14. 15. 16. 17. */ 18. int main(){ 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. //预编译 SQL 语句 //直接 SQL 语句 //2.连接句柄 cpp 文件功能说明: 1.数据库操作中的添加,修改,删除,主要体现在 SQL 语句上 2.采用直接执行方式和参数预编译执行方式两种 RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; //SQL 语句 UCHAR sql[37] = "insert into test values('aaa','100')"; UCHAR pre_sql[29] = "insert into test values(?,?)"; //1.连接数据源 //1.环境句柄 retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); //判断连接是否成功 if (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_I ) { ( NFO) 39. 40. 41. 42. 43. 44. 45. 46. printf("连接失败!\n"); } else { //2.创建并执行一条或多条 SQL 语句 /* 1.分配一个语句句柄(statement handle) 2.创建 SQL 语句 3.执行语句 4.销毁语句
47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. */ retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一种方式 //直接执行 //添加操作 //SQLExecDirect (hstmt1,sql,37); //第二种方式 //绑定参数方式 char a[200]="bbb"; char b[200]="200"; SQLINTEGER p = SQL_NTS; //1 预编译 SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列 相同 //2 绑定参数值 SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2 00,0,&a,0,&p); SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2 00,0,&b,0,&p); //3 执行 SQLExecute(hstmt1); printf("操作成功!"); //释放语句句柄 SQLCloseCursor (hstmt1); SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); } //3.断开数据源 /* 1.断开与数据源的连接. 2.释放连接句柄. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) */ SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. } //##########################list.cpp########################## C 代码
1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. 9. SQLHENV henv = SQL_NULL_HENV; 10. SQLHDBC hdbc1 = SQL_NULL_HDBC; 11. SQLHSTMT hstmt1 = SQL_NULL_HSTMT; 12. 13. /* 14. 查询 SQLSERVER 数据库,1.条件查询,2.直接查询全部 15. */ 16. int main(){ 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. UCHAR sql1[39] = "select b from test where a = 'aaa'"; UCHAR sql2[35] = "select b from test where a = ? "; UCHAR sql3[19] = "select b from test"; (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); //1.连接数据源 retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); if (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_I ) { ( NFO) 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. printf("连接失败!"); } else { //2.创建并执行一条或多条 SQL 语句 /* 1.分配一个语句句柄(statement handle) 2.创建 SQL 语句 3.执行语句 4.销毁语句 */ retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一种方式
分享到:
收藏