sqlite3的绑定功能家庭的使用及其注意的细节

前言

我们告诉你在本文中是如何使用sqlite3的参数化机制进行数据插入或更新操作,看你怎么玩。下面只列出代码,然后我想提一些注意事项。

下面的代码,有问题,插入后的东西一定是:


插入工作的价值观(铪铪铪铪),,,,铪,铪,空,空,空,空,铪铪铪铪,,,,铪,零,零,零,110.0,1.0108.9,Hg,铪,铪,铪铪,


看看问题代码:


sqlite3_stmt *声明;
CString SQL =插入工作价值观(,,,,,,,,,,,,,,,,,,,,,,, ;
int RC = sqlite3_prepare_v2(DB,sql.getstring(),1,支撑,空);

如果(RC)!= sqlite_ok)
{
MessageBox(sqlite3_prepare_v2失败!);
返回;
}

计数= 0;
p_wnd = prevwnd;

而(计数+ < id_totalcount)
{
CString DbStr;

p_wnd = CWnd:::GetNextDlgTabItem(p_wnd,假);
如果(p_wnd = null)
{
返回;
}

p_wnd -> GetWindowText(dbstr);


{
如果(!DbStr.GetLength())
{
RC = sqlite3_bind_null(STMT、计数);
打破;
}

日期
如果(数= = id_chudanriqi | |
数= id_chufariqi | |
数= id_huankuanriqi | |
id_huoliriqi数= =)
{
CDateTimeCtrl *(CDateTimeCtrl *)p_wnd timectl =;
CString时间= DateTimeToString(* timectl);

RC = sqlite3_bind_text(STMT、计数、time.getstring time.getlength(),(),sqlite_static);
打破;
}
其他的
{
与资金有关的真实类型
如果(数= = id_baoxianjine | |
数= id_yongjinbilv | |
数= id_jingbaofei | |
数= id_huankuanjine | |
数= id_lirunbilv | |
id_lirunjine数= =)
{
双提成额= 0;
int RTN = sscanf_s(DbStr.GetString(),%如果

断言(RTN = 1);

RC = sqlite3_bind_double(STMT、计数、提成额);
}
其他的
{
定义字符串=(char *)dbstr.getstring();
int c = strlen(str);
dbstr.getlength C1 = int();

RC = sqlite3_bind_text(STMT、计数、DbStr.GetString(1 / * dbstr。长度),(sqlite_static)* /,);
}
}
}(0);

如果(RC)!= sqlite_ok)
{
CString ErrStr = sqlite3_errstr(RC);
MessageBox(errstr);

返回;
}
}

RC = sqlite3_step(支撑);

如果(RC)!= sqlite_done)
{
如果(RC = sqlite_error)
{
CString DbErr;
dberr。格式(SQL插入失败,%s

MessageBox(dberr);
}
其他的
{
MessageBox(sqlite3_step失败!);
}
}

sqlite3_finalize(支撑);


为什么



因为,sqlite3_bind_text结合文本,需要做的工作:




RC = sqlite3_step(支撑);


它是一个统一的提交上述代码作为一个临时变量,RC = sqlite3_step(支撑);它不在早期存在。所以代码是正常的。

修订如下:


sqlite3_stmt *声明;
CString SQL =插入工作价值观(,,,,,,,,,,,,,,,,,,,,,,, ;
int RC = sqlite3_prepare_v2(DB,sql.getstring(),1,支撑,空);

如果(RC)!= sqlite_ok)
{
MessageBox(sqlite3_prepare_v2失败!);
返回;
}

计数= 0;
p_wnd = prevwnd;

原dbstr { 1 } id_totalcount +;

而(计数+ < id_totalcount)
{
dbstr {数量}空();

p_wnd = CWnd:::GetNextDlgTabItem(p_wnd,假);
如果(p_wnd = null)
{
返回;
}

p_wnd -> GetWindowText(dbstr {数量});


{
如果(!dbstr {数量}。GetLength())
{
RC = sqlite3_bind_null(STMT、计数);
打破;
}

日期
如果(数= = id_chudanriqi | |
数= id_chufariqi | |
数= id_huankuanriqi | |
id_huoliriqi数= =)
{
CDateTimeCtrl *(CDateTimeCtrl *)p_wnd timectl =;
CString时间= DateTimeToString(* timectl);

dbstr {数量} =时间;

RC = sqlite3_bind_text(STMT、计数、time.getstring time.getlength(),(),sqlite_static);
}
其他的
{
与资金有关的真实类型
如果(数= = id_baoxianjine | |
数= id_yongjinbilv | |
数= id_jingbaofei | |
数= id_huankuanjine | |
数= id_lirunbilv | |
id_lirunjine数= =)
{
双提成额= 0;
int RTN = sscanf_s(dbstr {数量}。GetString(),%如果

断言(RTN = 1);

RC = sqlite3_bind_double(STMT、计数、提成额);
}
其他的
{
RC = sqlite3_bind_text(STMT、计数、DbStr {数量}。GetString(),dbstr {数量}。GetLength(),sqlite_static);
}
}
}(0);

如果(RC)!= sqlite_ok)
{
CString ErrStr = sqlite3_errstr(RC);
MessageBox(errstr);

返回;
}
}

RC = sqlite3_step(支撑);

如果(RC)!= sqlite_done)
{
如果(RC = sqlite_error)
{
CString DbErr;
dberr。格式(SQL插入失败,%s

MessageBox(dberr);
}
其他的
{
MessageBox(sqlite3_step失败!;
}
}

sqlite3_finalize(支撑);


连接到数据库创建的SQL语法:


SQLite >转储工作。
语用foreign_keys =关闭;
事务的开始;
创建表的工作(baodanhao文本唯一主键,chudanriqi文本,Qudao的文本)
实用文本,baoxianpinpai文本,baoxianjihua文本,baoxianjine房,yongjinbilv房,jingbaofei房。
anriqi文本,shifouquane文本,lirunbilv房,lirunjine房,huoliriqi文本,fapiaojisong文本。


总结

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,您可以留言交流,谢谢您的支持。