private Boolean dbUpdate()
{
string strSql = "select ID as 学号,name as 姓名, class as 班级 from tbl_Student"
//新建一个用于将dgvStudent数据 *** 作更新到数据库的内存表
DataTable dtUpdate= new DataTable()
//新建一个用于更新dgvStudent数据 *** 作的内存表
//利用da初始化dtUpdate的表结构(和数据)
SqlDataAdapter da = new SqlDataAdapter(strSql, sqlCon)
da.Fill(dtUpdate)
//初始化的数据需清除,以存放更新后的dgvStudent数据
dtUpdate.Rows.Clear()
//再建一个内存表,用于将更新后的dgvStudent数据逐条读取出来存入更新内存表中
DataTable dtShow = new DataTable()
//逐条读取出来存入更新内存表中
dtShow = (DataTable) dgvStudent.DataSource
for (int i = 0i <dtShow.Rows.Counti++)
{
dtUpdate.ImportRow(dtShow.Rows[i])
}
try
{
this.sqlCon.Open()
//使对DataSet所做的更改与关联的SQL Server数据库相协调
SqlCommandBuilder sqlCbld
sqlCbld = new SqlCommandBuilder(da)
//通过该da将更新后的dgvStudent数据(即已复制的dtUpdate)更新到数据库
da.Update(dtUpdate)
sqlCon.Close()
}
catch(Exception ex)
{
MessageBox.Show("数据库 *** 作失败:" + ex.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
return false
}
dtUpdate.AcceptChanges()
return true
}
方法如下:1.头文件:
#include
#include
#include//这个是必需要包含的,下面对mysql的所有 *** 作函数,都出自这里
2.定义一个MYSQL变量:
MYSQLmysql;
这里MYSQL是一个用于连接MySql数据库的变量。
在后面对mysql数据库的 *** 作中,我们就用这个MYSQL变量作为句柄的。
3.定义数据库参数:
charhost[32]=”localhost”
charuser[32]=”username”
charpasswd[32]=”pwd”
chardbname[32]=”testdb”
4.数据库 *** 作
1).初始化数据库:
mysql_init(&mysql);
2).连接数据库:
mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0);
我们在 *** 作时,可以对以上的函数进行if测试,如果初始化或者连接出错,作出相应提示,以便调试。
5.对数据库的 *** 作:
Mysql_query(&mysql,“select*fromtestdbwherecondition”)
我们在实际 *** 作中,为了更方便的使用程序中的某些变量,我们将会用到一个函数:
intsprintf(char*str,constchar*format,?)
这个函数用来格式化我们的字符串,然后将变量按照给你的格式,赋给第一个参数。
我们使用这个方法方法可以很方便的使用我们的变量来对数据库进行 *** 作。例如我们将要进行数据库的查询 *** 作,我们就可以这样使用:
sprintf(sql,”select*fromtestdbwhereusername=‘%s’”,u_name)
然后使用mysql_query(&mysql,sql)进行查询。
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构, *** 作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
#include <stdlib.h>1,链表版本
typedef struct node
{
char name[20]
int number
struct node *next
} N1
void save_data( N1 *h)
{
N1 *hed = h
FILE *fspointer
fspointer = fopen("student1.txt", "w+")
if(hed->next==NULL)
return
if(fspointer==NULL)
return
hed = hed->next
while (hed!= NULL)
{
fprintf(fspointer,"%s\t%d\n",hed->name,hed->number)
hed = hed->next
}
fclose(fspointer)
}
2,数组版本
void save_data(int arr[],int num)//num,数组元素数量
{
int i
FILE *fspointer
fspointer = fopen("student1.txt", "w+")
if(fspointer==NULL)
return
for(i=0i<numi++)
fprintf(fspointer,"%d",arr[i])
fclose(fspointer)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)