黑马程序员技术交流社区
标题:
数据库操作问题?
[打印本页]
作者:
徐宏伟
时间:
2012-9-8 17:13
标题:
数据库操作问题?
1、我们在ADO.Net部分,通过ADO.Net技术使得我们的程序可以命令数据库服务器来操作数据库,以便于达到我们的目的(insert、delete、update、select。。。);
2、在使用SqlDataReader对象的时候,我们只是在我们的程序里面通过dataReader.Read()命令游标一下一下的移动,以读取我们想要的数据,这些数据本身是在服务器端的,不在我们本地,
这样在连接断开的情况下就不能操作数据库里面的data了;
3、于是就出现了DataSet,这么一个数据集,这个是存在于我们的程序端的内存里面的;但是操作所谓的“大数据”的时候就会出现问题,因为我们的内存是有限的,我们不能把数据库里面的
所有的数据都读取到我们的内存里面;这样我们的内存会爆掉的;
4、但是DataSet操作的时候会出现很多的缺点,其中之一就是dataset是弱类型的,话说谁能解释下弱类型和强类型之间的区别,越详细越好!!!
【备注】先谢谢了~~~
作者:
mjbtdym
时间:
2012-9-8 17:40
一、弱类型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);
作者:
黑马-金鑫
时间:
2012-9-8 19:12
简单的说...类型化数据集就是具有内置架构的强类型DataSet...非类型化数据集就是没有内置架构的DataSet...
类型化数据集是对象集合...而非类型化数据集只是一些二维表...
作者:
霍永刚
时间:
2012-9-9 07:52
1.强类型是自定义类所具有的优势。它使得对象处理的数据更容易被理解,而不需要与ADO.NET和XML编程模型打交道。这在大型系统里是很有用的,特别是当设计者定义了由自定义类所组成的数据访问层,并把设计向组织内的其他程序员发布的时候。当然,现在自定义类的使用有下降的趋势:它们需要编更多的代码,因为你必须创建.NET Framework所缺少的对象关系映射层。
2.强/弱类型是指类型检查的严格程度的。语言有无类型,弱类型和强类型三种。无类型的不检查,甚至不区分指令和数据。弱类型的检查很弱,仅能严格的区分指令和数据。强类型的则严格的在编译期进行检查。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2