使用c语言对sql server进行增删改查操作

您所在的位置:网站首页 使用嵌入式sql对学生课程数据库的要求 使用c语言对sql server进行增删改查操作

使用c语言对sql server进行增删改查操作

2024-07-15 04:33| 来源: 网络整理| 查看: 265

使用c语言对sql server进行增删改查操作

众所周知,自从sql server 2000以后,便不再支持c语言的嵌入式语言操作,因此需要使用odbc连接的方式来进行操作。我在完成实验的时候一直找不到较为完整的操作代码,走了不少弯路,在这里分享给大家我的一些总结。

环境 windows 10 sql server 2019 vs2019 注意:请使用多字节字符集

ODBC连接 这一部分我就不做详细的赘述,在论坛中很容易搜索的到。连接数据库 #include #include #include #include #include void Connect(SQLRETURN ret, SQLHENV& henv, SQLHDBC& hdbc, SQLHSTMT& hstmt)//设置连接参数的句柄 { const char* SY1 = "DOST"; unsigned char* SY = (unsigned char*)SY1; const char* db21 = "sa";//数据库ODBC连接的账户 unsigned char* db2 = (unsigned char*)db21; const char* pass1 = "12345678";//数据库ODBC连接的密码 unsigned char* pass = (unsigned char*)pass1; ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);//申请环境句柄 ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER); ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接句柄 ret = SQLConnect(hdbc, SY, SQL_NTS, db2, SQL_NTS, pass, SQL_NTS); /*db2为配置的ODBC数据源名称,这里根据自己的配置进行修改*/ if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)) { printf("连接数据库失败!\n"); return; } ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//用于分配句柄 }

3.增加功能

void insert(SQLRETURN ret, SQLHENV& henv, SQLHDBC& hdbc, SQLHSTMT& hstmt) { int i = 0,j = 0,k = 0; unsigned char tablename[60]; do { printf("请输入你想要插入数据的表的序号\n"); printf("1.学生表S 2.课程表C 3.学生成绩表SC\n"); scanf("%d", &i); switch (i) { case 1:strcpy((char*)tablename, "S(sclass,sno,sname,ssex,Sdept,sage) values (?,?,?,?,?,?)");printf("请根据S(sclass,sno,sname,ssex,Sdept,sage)依次输入数据,数据之间带回车或空格\n"); break;//非常明显这里采用了动态sql的方式,问号的地方即为我们后期需要输入的地方 case 2:strcpy((char*)tablename, "C values (?,?,?,?)"); printf("请根据C(cno,cname,cpno,ccredit)依次输入数据,数据之间带回车或空格\n"); break; case 3:strcpy((char*)tablename, "SC values (?,?,?,?)"); printf("请根据SC(sclass,sno,cno,grade)依次输入数据,数据之间带回车或空格\n"); break; default:printf("输入错误,重新输入\n"); } } while (i 3); char s[5][10], s1[10] = "", s2[10] = "", s3[10] = "", s4[10] = "", s5[10] = ""; int num; /*long conlumnlen;*/ SQLAllocStmt(hdbc, &hstmt); SQLCHAR sql2[100] = "insert into ";//要注意,sqlchar实际上就是unsigned char,这在字符串操作语句当中是不能够直接操作的,需要强转为char型后再进行操作 strcat((char*)sql2, (char*)tablename); //printf("%s\n", sql2); SQLPrepare(hstmt, (SQLCHAR*)sql2, strlen((char*)sql2));//这里是对sql语句进行prepare操作,这一步有助于防注入,提高安全性 if (i == 1) j = 5; else if (i == 2|| i==3) j = 3; for (k = 0; k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3