程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言+ODBC+SQL 操作(向SQL裡面添加數據),odbcsql

C語言+ODBC+SQL 操作(向SQL裡面添加數據),odbcsql

編輯:關於C語言

C語言+ODBC+SQL 操作(向SQL裡面添加數據),odbcsql


為了節省時間,我就引用上一節的數據庫的表和C語言的結構體數組,在結構體數組中添加數據,清空數據庫數據。

第一步查詢:SQLBindParameter函數的用法。 

SQLRETURN SQLBindParameter(
      SQLHSTMT        StatementHandle,    // statement句柄
      SQLUSMALLINT    ParameterNumber,    // 參數位於語句中的序號,最小為1
      SQLSMALLINT     InputOutputType,    // 入參/出參類型標識[1]
      SQLSMALLINT     ValueType,          // 對應的C數據類型標識[2]
      SQLSMALLINT     ParameterType,      // 對應的SQL數據類型標識[2]
      SQLULEN         ColumnSize,         // 對應字段長度
      SQLSMALLINT     DecimalDigits,      // 如果是浮點數,則對應字段精度
      SQLPOINTER      ParameterValuePtr,  // 參數緩存
      SQLLEN          BufferLength,       // 參數緩存字節數
      SQLLEN *        StrLen_or_IndPtr);  // 用於表示字符串長度或NULL值的標識[3]

 注意:

  1、在ODBC中,整型的SQL_INTEGER類型對應的C語言數據類型標識是SQL_C_LONG,而不是SQL_C_INT,並且沒有SQL_C_INT這種類型。

  2、在存入整型的數據時,SQLPOINTER ParameterValuePtr  應該要加取地址符‘&’。

  3、SQLUSMALLINT ParameterNumber 這個參數不能隨便寫,要與建表時的順序相同。

第二步:寫添加數據的函數。

void workertianjiashuju(int i)
{
    SQLRETURN ret;  
    SQLHENV henv;//SQLHANDLE henv  
    SQLHDBC hdbc;//SQLHANDLE hdbc  
    SQLHSTMT hstmt;//SQLHANDLE hstmt  
  
    ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申請環境句柄  
    ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//設置環境屬性  
    ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申請數據庫連接句柄  
    ret=SQLConnect(hdbc,(SQLCHAR*)"phonesql",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"123456",SQL_NTS);//連接數據庫  
    if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){  
       ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申請SQL語句句柄  
      SQLCHAR sql[]="INSERT INTO worker VALUES (?,?,?,?,?,?,?,?,?,?);";
	  SQLINTEGER P = SQL_NTS;
	  ret=SQLPrepare(hstmt,sql,SQL_NTS);
       ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&gong[i].num,0,&P);//綁定參數  
	   ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].name,20,&P);//綁定參數 
       ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].sex,10,&P);//綁定參數
       ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&gong[i].age,0,&P);//綁定參數  
	   ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].shenfennum,20,&P);
	   ret=SQLBindParameter(hstmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].xueli,10,&P);
	   ret=SQLBindParameter(hstmt,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].mianmao,10,&P);
	   ret=SQLBindParameter(hstmt,8,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].mima,20,&P);
	   ret=SQLBindParameter(hstmt,9,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,gong[i].quanxian,10,&P);
	   ret=SQLBindParameter(hstmt,10,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,20,0,gong[i].born,20,&P);
	   ret=SQLExecute(hstmt);//直接執行SQL語句  
       if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){  		
           
		   /*****************測試結構體數組********************/
		 printf("添加第%d條信息成功!\n",i+1);  
  
         SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//釋放語句句柄  
       }else printf("添加數據庫操作失敗!\n");  
              
         SQLDisconnect(hdbc);//斷開與數據庫的連接  
    }  
    else printf("連接數據庫失敗!\n");     
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//釋放連接句柄  
    SQLFreeHandle(SQL_HANDLE_ENV,henv);//釋放環境句柄 

}

 注意:SQLCHAR sql[]="INSERT INTO worker VALUES (?,?,?,?,?,?,?,?,?,?);";  這個語句中的’?’表示要添加的數據。(添加多少個數據,就寫多少個問號)

 第三步:寫主函數調用,代碼略。

   完成後,數據庫中的數據變為

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved