请问如何用VC连接数据库并读取SQL Server数据库中的数据

请问如何用VC连接数据库并读取SQL Server数据库中的数据,第1张

在新建的工程中选择有数据库支持,点那个数据源按钮然后选择要你使用的数据库,将你做好的数据库全部选中,在编程时建立基类为CRECORDSET的类,选择你在该模块中要使用的数据库,然后在其后的编程中调用

显示数据库用列表控件

剩下的就看你的编程了

1、使用insert方法插入记录

sqlitedatabase的insert方法的签名为long

insert(string

table,string

nullcolumnhack,contentvalues

values),这个插入方法的参数说明如下:

table:代表想插入数据的表名。

nullcolumnhack:代表强行插入null值的数据列的列名。

values:代表一行记录的数据。

insert方法插入的一行记录使用contentvalues存放,contentvalues类似于map,它提供了put(string

key,xxx

value)(其中key为数据列的列名)方法用于存入数据、getasxxx(string

key)方法用于取出数据。

例如如下语句:

contentvalues

values=new

contentvalues()

values.put("name","孙悟空"):

values.put("age",500)

//返回新添记录的行号,该行号是一个内部直,与主键id无关,发生错误返回-1

long

rowid=db.insert("person_inf",null,values)

2、使用update方法更新数据

sqlitedatabase的update方法签名为update(string

table,contentvalues

values,string

whereclause,string[]

whereargs),这个更新方法的参数说明如下:

table:代表想要更新数据的表名。

values:代表想要更新的数据。

whereclause:满足该whereclause子句的记录将会被更新。

whereargs:用于为whereargs子句传递参数。

例如我们想要更新person_inf表中所有主键大于20的人的人名,可调用如下方法:

contentvalues

values=new

contentvalues()

//存放更新后的人名

values.put("name","新人名")

int

result=db.update("person_inf",values,"_id>?",new

integer[]{20})

3、使用delete方法删除记录

sqlitedatabase的delete方法签名为delete(string

table,string

whereclause,string[]

whereargs),这个删除的参数说明如下:

table:代表想删除数据的表名。

whereclause:满足该whereclause子句的记录将会被删除。

whereargs:用于为whereargs子句传入参数。

删除person_inf表中所有人名以孙开头的记录

int

result=db.delete("person_inf","person_name

like

?",new

string[]{"孙_"})

4、使用query方法查询记录

sqlitedatabase的query方法签名为cursor

query(boolean

distinct,string

table,string[]

columns,string

selection,string[]

selectionargs,string

groupby,string

having,string

orderby,string

limit),这个query方法的参数说明如下。

distinct:指定是否去除重复记录。

table:执行查询数据的表名。

columns:要查询出来的列名。

selection:查询条件子句。

selectionargs:用于为selection子句中占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。

groupby:用于控制分组。

having:用于对分组进行过滤。

orderby:用于对记录进行排序。

limit:用于进行分页。

例如查询出person_inf表中人名以孙开头的数据

cursor

cursor=db.query("person_inf",new

string[]{"_id,name,age"},"name

like

?",new

string

[]{"孙%"},null,null,"personid

desc","5,10")

cursor.close()

比较复杂,看我的笔记。

根本方法是定义图片VARIANT变量,其类型为VT_ARRAY|VT_UI1。此时VARIANT的值为SAFEARRAY.将图片载入SAFEARRAY中。便可以存入图片了。可以存储任何格式 的图片

void CDataBase16Dlg::OnBnClickedAddNew()

{

CString filepath

CFileDialog filedialog(TRUE)

if(filedialog.DoModal()==IDOK)

{

filepath=filedialog.GetPathName()

}

CFile file

file.Open(filepath,CFile::modeRead)

SAFEARRAY *psa //SAFEARRAY是variant变量的参数之一。

SAFEARRAYBOUND bound[1]//SAFEARRAYBOUND为SAFEARRAY结构成员之一。

bound[0].lLbound=0 //代表数组起始索引,一般为 0

bound[0].cElements=file.GetLength() //代表元素个数,即图片的大小。以字节为单位

psa=SafeArrayCreate(VT_UI1,1,bound) //创建SAFEARRAY,中间参数代表创建的是一个一维数组

BYTE *filebuffer=new BYTE[file.GetLength()+1]

file.Read(filebuffer,file.GetLength()) //将图片文件读入内存。

for(long index=0index<file.GetLength()index++)

SafeArrayPutElement(psa,&index,&filebuffer[index]) //将图片的每一字节放入SAFEAWWAY中。

VARIANT vt

vt.vt = VT_ARRAY|VT_UI1

vt.parray=psa

m_recordset->GetFields()->GetItem(_variant_t("肖像"))->AppendChunk(vt)//添加图片。

m_recordset->Update()

}

至于读取,你没问我也就不答了,比较长。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9424541.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存