C言語とSQL SERVERデータベース


1.C言語でSQL SERVERデータベースを操作し、ODBCオープンデータベース接続でデータの追加、修正、削除、クエリーなどの操作を行う.Step 1:SQLSERVERサービスを開始します.たとえば、HNHJ、スタートメニュー->実行->net start mssqlserver step 2:エンタープライズマネージャを開き、データベースtestを確立し、testライブラリでtestテーブル(a varchar(200)、b varchar(200))step 3:システムDSNを確立し、スタートメニュー->実行->odbcad 32、追加->SQL SERVER名:csql、サーバ:HNHJユーザーがログインIDとパスワードを使用してSQLSERVER検証を行い、ログインID:sa、パスワード:デフォルトのデータベースを変更:test...データソースをテストし、テストに成功し、DNSの追加に成功しました.
2.cppファイルの完全なコード
//##########################save.cpp##########################
#include <stdio.h>   
#include <string.h>   
#include <windows.h>   
#include <sql.h>   
#include <sqlext.h>   
#include <sqltypes.h>   
#include <odbcss.h>   

SQLHENV henv = SQL_NULL_HENV;   
SQLHDBC hdbc1 = SQL_NULL_HDBC;   
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;   

/*
	cpp      :
	1.         ,  ,  ,     SQL   
	2.                    
*/
int main(){   
	RETCODE retcode;   
	UCHAR	szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",   
            szUID[MAXNAME]   =   "sa",   
            szAuthStr[MAXNAME]   =   "";  
	//SQL  
		//  SQL  
	UCHAR	sql[37] = "insert into test values('aaa','100')";
		//   SQL  
	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);   
		//2.      
	retcode   =   SQLAllocHandle(SQL_HANDLE_DBC,   henv,   &hdbc1);   
	retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);    
	//        
	if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {     
		printf("    !
"); } else { //2. SQL /* 1. (statement handle) 2. SQL 3. 4. */ 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,200,0,&a,0,&p); SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,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); }

 
//##########################list.cpp##########################
#include <stdio.h>   
#include <string.h>   
#include <windows.h>   
#include <sql.h>   
#include <sqlext.h>   
#include <sqltypes.h>   
#include <odbcss.h>   

SQLHENV henv = SQL_NULL_HENV;   
SQLHDBC hdbc1 = SQL_NULL_HDBC;   
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;   

/*
	  SQLSERVER   ,1.    ,2.      
*/
int main(){   
	RETCODE retcode;   
	UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1]   =   "csql",   
            szUID[MAXNAME]   =   "sa",   
            szAuthStr[MAXNAME]   =   "";  
    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";
	
	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);   
	//1.     
	retcode   =   SQLConnect(hdbc1,   szDSN,   4,   szUID,   2,   szAuthStr,   0);    
	if   (   (retcode   !=   SQL_SUCCESS)   &&   (retcode   !=   SQL_SUCCESS_WITH_INFO)   )   {   
		printf("    !");
	}   else   {   
		//2.          SQL  
		/*
		1.        (statement handle)
		2.  SQL  
		3.    
		4.    
		*/
		retcode   =   SQLAllocHandle(SQL_HANDLE_STMT,   hdbc1,   &hstmt1);   
		//     
		/*
		//    
		SQLExecDirect (hstmt1,sql1,39);
		char list[5];
		SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
		SQLFetch(hstmt1);
		printf("%s
",list); */ // /* // char a[200]="aaa"; SQLINTEGER p = SQL_NTS; //1. SQLPrepare(hstmt1,sql2,35); // , //2. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p); //3. SQLExecute(hstmt1); char list[5]; SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); SQLFetch(hstmt1); printf("%s
",list); */ // /* 1. 。 2. 。 3. */ //3. ( ) SQLExecDirect (hstmt1,sql3,19); char list[5]; SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); do{ retcode = SQLFetch(hstmt1); if(retcode == SQL_NO_DATA){ break; } printf("%s
",list); }while(1); // SQLCloseCursor (hstmt1); SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); } //4. /* 1. . 2. . 3. ( ) */ SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); }

 
3.まとめ:ODBCデータベースの操作はJDBCステップと同様で、融通して学ぶことができる.