转载

C语言+ODBC+SQL 操作(向SQL里面添加数据)

为了节省时间,我就引用上一节的数据库的表和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 (?,?,?,?,?,?,?,?,?,?);";  这个语句中的’?’表示要添加的数据。(添加多少个数据,就写多少个问号)

第三步:写主函数调用,代码略。

完成后,数据库中的数据变为

C语言+ODBC+SQL 操作(向SQL里面添加数据)

C语言+ODBC+SQL 操作(向SQL里面添加数据)

正文到此结束
Loading...