一、弱类型Dataset
1、自动生成InsertCommand,DeleteCommand....
new SqlCommandBuilder(SqlDataAdapter);
2、涉及到的类
SqlConnection 与数据库之间的连接。 相当于delphi dbconnection
SqlCommand 负责向数据库中发送SQL命令 SqlDataReader 负责读取数据集,读取SqlCommand 的执行结果。
SqlDataReader 和 SqlCommand 相加相当于DELPHI 中的AdoQuery,AdoDataset,Adocommand,AdoTable等
SqlDataReader 只可按照查询出来的数据表指针向下读取数据,不可回头,也不可以隔行向上或向下读取数据。
SqlDataAdapter 与数据库交互执行查询语句
Dataset 数据集(可以是多个),接收SqlDataAdapter 的查询结果 与DELPHI中的Adodataset类似。
DataTable 接收Dataset 中的某一个数据集,
DataRow 接收DataTable 的行
3、操作数据库
增加行
DataRow row=table.NewRow();
row["ID"] = 123;
row["Name"] = "456";
row["Department_ID"] = "01";
table.Rows.Add(row);
DataAdapter.Update(dataset); //提交到数据库中
删除行:
table.Rows.Remove(table.Rows[1]);//只在内存中 删除行
ad.Update(ds);//提交到数据库中
table.Rows[0].Delete();//真正在数据库中删除
DataAdapter.Update(table); //提交到数据库中
修改行:
DataRow row=table.Rows[0];
row["name"]="r";
DataAdapter.Update(ds); //向数据库提交对数据的更改
提取其中的某一列的值
MessageBox.Show(table.Rows[i]["name"].ToString());
string connstring = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
DataSet ds = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter("select * from employee ",conn);
ad.Fill(ds);
new SqlCommandBuilder(ad);
DataTable table=ds.Tables[0];
DataRow row=table.Rows[0];
// row["name"]="r";
// ad.Update(ds); //向数据库提交对数据的更改
MessageBox.Show(table.Rows.Count.ToString());
table.Rows.Remove(table.Rows[1]);//只在内存中 删除行
ad.Update(ds);//
table.Rows[0].Delete();//真正在数据库中删除
ad.Update(table);
MessageBox.Show(table.Rows.Count.ToString());
/** DataRow rw=table.NewRow();
rw["ID"] = 123;
rw["Name"] = "456";
rw["Department_ID"] = "01";
table.Rows.Add(rw);
ad.Update(ds);//增加行 **/
4、通过SqlCommand 操作数据库
string connstring = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from employee where id=@id";
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@id",textBox2.Text));
SqlDataReader red=cmd.ExecuteReader();
if (red.Read())
{
MessageBox.Show("主键重复,请检查!");
return;
}
red.Close(); //在对应的Command执行新的命令之前,要把与该Command相关联的DataReader关掉
cmd.CommandText = "insert into employee(id,name,department_id) values(@id,@name,@department_id) ";
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("ID",textBox2.Text));
cmd.Parameters.Add(new SqlParameter("name",textBox3.Text));
cmd.Parameters.Add(new SqlParameter("department_id", textBox3.Text));
cmd.ExecuteNonQuery();
MessageBox.Show("插入成功");
二、强类型Dataset
1、批量操作数据库时,需要先把对应的TableAdapter 的 Connection 打开,执行完毕后再关闭掉,这样可以明显提高执行效率。
2、需要新建数据集项目、新建数据连接。
3、把数据连接中的表拖入数据信项目。
4、系统自动生成对应的TableAdapter 对像,DataTable对像。ROW对像。
5、可在Dataset对像中自定义方法。包括带参数的方法,通过这些方法来查询、修改、删除数据库中的数据。
6、可通过DataTable[i].列名 来取值 i表示行ID,
//7、在有大数据量执行之前要把对应的 TableAdapter 所对应的Connection 打开,执行完毕后再关掉,这样可以明显提高扫行效率。
例 表名为 Employee DataSet1为数据集名
EMPLOYEETableAdapter adapt = new EMPLOYEETableAdapter();
DataSet1.EMPLOYEEDataTable data = adapt.GetData();
for (int i = 0; i < data.Count; i++)
{
DataSet1.EMPLOYEERow Row = data[i];
if (!data[i].IsCITYNull())
{
MessageBox.Show(data[i].CITY);
}
MessageBox.Show(data[i].NAME);
}
data[0].NAME = "china";
adapt.Update(data);
|