二连接SQL2005 数据库老程序员学C#(二)--连接SQL2005数据库
将上面的按钮控件名字改成hellword,然后我们再新建一个按钮,名称改为"SQLdatabase",下来我们就开始建立最简单的数据库连接测试。
首先确认数据库是否连接正确:
打开SQL Server 2005 Management Express,会弹出窗口要求连接,如图:
选择连接即可,在打开的数据库中建立一个新的数据库"testDB",创建一
个表"danwei",具体如图:(其中danweiID部分,设置数据类型的时候,我们
希望自动递增,则设置选择INT型后,设置"列属性",选"标识规范"--(是标识)---选"是","标识增量"和"标识种子"均设置为"1",表示每次增加一个)
下来我们从Visual Studio 2008中,测试是否能够连接数据库。
我们使用比较可靠的数据控件来测试。
打开--视图--服务器资源管理器--数据库,右键点击"数据库"--"添加连接…",打开添加连接对话框,选择服
务器名,如果下拉列表中没有建立的数据库服务器,那么手工添加数据库服务器名称(拷贝打开SQL 2005 Express,如果
已经打开了,右键点服务器名称,选择"连接",然后拷贝服务器名,到添加连
接对话框进行粘贴即可)。然后在"选择或输入一个数据库名"下拉框里选择刚刚我们建立的数据库"textDB"。点击"测试连接"。如果SQL服务器端设置没有问题,就会显示"测试连接成功"。如果弹出不允许远程访问,则请回到本文第一
部分,查看配置SQL2005远程访问的方法。
如果测试连接成功,我们下来就可以使用工具栏里的"BindingSource"控件来绑定数据源,并用DataGridView来显示数据了。这个的过程很简单,添加控件了,在属性框里选择DataSource的值为我们刚建的连接就可以了。
当然,老程序员肯定是不愿意这么操作数据了,他需要更大的灵活性,于是准备来测试使用什么样的代码来连接和操作数据。现在创建的数据库中手工添加记录值如图:
在"hello world"程序中进行测试,创建一个label3,一个按钮button2,分别把文本属性设置如下图:
要使用SQL操作语句,就必须引用SQL类库。所以在代码文件上面,添加如下:
usingSystem.Data.SqlClient;//添加引用
双击button2,写入代码如下:
privatevoid button2_Click(object sender,EventArgs e)
{
//定义数据库连接字符
string str_con=@"Data Source=26-3B72903E783B\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";
//定义SQL语句字符串
string sql="select*from danwei";
//定义并实例化数据库连接类型变量
SqlConnection conn=new SqlConnection(str_con);
//打开数据库连接
conn.Open();
//打开数据库连接
SqlCommand comm=new SqlCommand(sql,conn);
//SqlDataAdapter da=new SqlDataAdapter(comm);
//da.SelectCommand=new SqlCommand(sql,conn);
sql存储过程实例//DataSet ds=new DataSet();
//da.Fill(ds,"danwei");
//执行读操作
SqlDataReader objSqlReader=comm.ExecuteReader();
//打开数据库连接
while(objSqlReader.Read())
{
//将数据库中读取的值赋值给label3
label3.Text=objSqlReader.GetValue(1).ToString();
}
objSqlReader.Close();
}
每一句的代码都作了说明。在实现功能的同时,要注意到我注释掉的四行代码。运行后,label3会显示数据库值"中国"。
理解起来很简单吧。读取数据库的步骤一般为:定义连接字符串---打开数据库连接--执行查询操作--将查询出来的值赋值给显示控件。
其实现在已经可以很灵活的操作数据库了,老程序员可以很顺手的插入与
删除、修改数据库值了。不过对于新手,老程序员还是想将这几个类说的详细点。
SqlConnection类:表示SQL Server数据库的一个打开的连接。即对数据
库进行连接操作的类。
SqlCommand类:表示要对SQL Server数据库执行的一个Transact-SQL语
句或存储过程。也就是用它的实例来执行对数据库的一些操作,比如读、写等
操作。
SqlDataReader类:提供一种从SQL Server数据库读取行的只进流的方式。就是一个读取数据库行的集合。
一般上面三个类就可以完成对数据库的操作了。不过这里注释掉的语句里
面还要介绍几个相关类。
SqlDataAdapter类表示用于填充DataSet和更新SQL Server数据库的一
组数据命令和一个数据库连接。这个就厉害了。详细说说。
SqlDataAdapter是DataSet和SQL Server之间的桥接器,用于检索和保
存数据。
MSDN这样说的:
SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射Fill(它可更改DataSet中的数据以匹配数据源中的数据)和Update(它可更改数据源中
的数据以匹配DataSet中的数据)来提供这一桥接。更新是逐行进行的。对于每个已插入、修改和删除的行,Update方法会确定已对其执行的更改的类型(Insert、Update或Delete)。根据更改类型,执行Insert、Update或Delete
命令模板将已修改的行传播给数据源。当SqlDataAdapter填充DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非MissingSchemaAction属性设置为AddWithKey,否则这个隐式创建的架构中不
包括主键信息。也可以使用FillSchema,让SqlDataAdapter创建DataSet的
架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见
向数据集添加现有约束(ADO.NET)。
通俗的说就是,SqlDataAdapter的Fill语句可以将数据源(即连接的数据库)中的数据填充到DataSet类型数据结构的数据变量里面去,即更新了DataSet;而Update语句相反,是将DataSet变量里面的数据填充到数据源(即数据库)中去。
"SqlDataAdapter与SqlConnection和SqlCommand一起使用,以便在连接
到SQL Server数据库时提高性能。"
这里新人要问:SqlDataReader和SqlDataAdapter与上面两个数据库操作
类(SqlConnection和SqlCommand)联系又什么区别呢?我认为,SqlDataReader
只是得到了行数据,而SqlDataAdapter操作所得到的是一个整表,包括列和行的数据和结构。实用点说,就是SqlDataAdapter可以使用Cell(行,列的方式
来检索数据。
SqlDataAdapter还包括SelectCommand、InsertCommand、DeleteCommand、UpdateCommand和TableMappings属性,以便于数据的加载和更新。
DataSet又是什么呢?
DataSet表示数据在内存中的缓存。它用来指向从数据库中检索到的数据
在内存中缓存的位置,包含多个DataTable对象。简单点说,就是一个数据表
的集合(数据集),这些数据集合就是你用SQL语句查询到的数据组成的。这里
可以实施数据完整性检查。
好了,现在说说SqlDataAdapter与SqlConnection和SqlCommand,以及DataSet之间是怎么调用数据库的。
privatevoid button2_Click(object sender,EventArgs e)
{
//定义数据库连接字符
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论