9.6 ASP.NET数据库操作实例
在了解了数据源控件和数据绑定控件的功能和使用方法,并且了解了ADO.NET的基本知识后,就可以使用控件和ADO.NET来操作数据库。ASP.NET提供了强大的数据源控件和数据绑定控件,能够迅速的对数据库进行操作,同时,使用ADO.NET对数据进行操作,能够加深对ADO.NET的认识。
9.6.1 制作用户界面(UI)
使用数据控件和数据源控件显式数据,则需要为控件制作相应的用户界面,让数据控件对用户呈现的效果更好。首先,需要使用创建数据绑定控件GridView和数据源控件,并配置数据源控件,如图9-6所示。
图9-6 配置数据源控件和数据绑定控件
显然,对于用户而言,该数据源控件和数据绑定控件显然很不友好,这里就需要对数据绑定控件的界面进行修改。通过配置数据绑定控件的相应格式可以修改数据绑定控件的外观,如图9-7所示。
图9-7 编辑数据绑定控件界面
开发人员能够自定义数据绑定控件的样式,并且修改某些列的顺序,这里使用了自动套用格式,并将数据绑定控件的width属性设置为100%,这样编写宽度就能够适应浏览器的大小,从而随着浏览器的大小而改变。数据绑定控件配置完成后,值得注意的是,需要勾选SQL语句的高级选项,让数据绑定控件支持编辑、删除和选择,如图9-8所示。
图9-8 SQL高级选项
配置SQL高级选项后,数据源控件就会自动生成INSERT、UPDATE、DELETE语句,示例代码如下所示。
在完成用户界面的配置后,系统生成的HTML代码如下所示。
开发人员可以编写以上HTML实现更多的效果,当确定用户界面编写完毕后,就可以为数据绑定控件选择操作了。
9.6.2 使用GridView显示、删除、修改数据
配置完成用户界面,则需要选择GridView控件的属性并配置GridView任务,如图9-9和图9-10所示。
图9-9 默认GridView任务
图9-10 选择GridView任务
GridView控件支持分页、排序、编辑、删除和选定内容等操作。在GridView控件中,首先必须勾选【分页】复选框,然后再配置PageSize属性才能够让GridView控件支持分页功能。在GridView控件属性中如果勾选了【分页】复选框而不配置PageSize属性,则默认按10条数据分页。勾选了以启用分页、启用编辑、启用删除和启用选定内容后,GridView控件的界面如图9-11所示。
图9-11 编辑数据绑定控件界面
因为在数据源控件配置的过程中,已经配置了支持编辑、删除和选择,所以在数据绑定控件中可以选择启用编辑,启用删除和选定内容等操作,并且系统默认支持更新、插入、删除等操作,运行后如图9-12所示。
图9-12 GridView控件显式
GridView控件支持编辑、删除和选择,当单击编辑时,能够对选择的行进行数据编辑,如图9-13所示。编辑完成后,单击更新按钮则可以执行更新操作,而无需手动编写UPDATE操作,如图9-14所示。
图9-13 编辑数据
图9-14 执行更新操作
当单击删除时,则会执行DELETE命令,而无需手动编写DELETE命令。GridView控件支持分页、排序、编辑、删除和选定内容,开发人员无需手动编写更新、删除、编辑、也无需手动编写分页,对GridView控件进行缓存设置能够提高应用程序性能,在对数据库的操作,编辑及更新中,GridView控件能够方便开发人员,简化代码。
9.6.3 使用DataList显示数据
DataList控件需要编辑HTML模板来显式数据,虽然在开发上,DataList控件比GridView更加复杂,但是DataList控件能够实现更多效果。相比之下,DataList控件比GridView控件更加灵活,能够进行复杂的事件编写和样式控制。选择【自动套用格式】复选框并将DataList控件的宽度设置为100%,编辑基本的用户界面,如图9-15所示。
图9-15 DataList控件显式数据
通过编辑ItemTemplate能够实现自定义模板,而无需像GridView一样,以表格形式呈现,编辑后运行如图9-16所示。
图9-16 编写ItemTemplate模板
DataList控件执行数据操作基本上同GridView一样,DataList控件与GridView相比只下,有着更灵活的模板方案,能够实现更多的显示效果。
9.6.4 DataList分页实现
DataList控件本身并不带分页实现,如果需要DataList能够实现分页效果,则需要通过代码实现DataList控件的分页。DataList控件分页需要增加若干标签(Label)控件来显式“上一页”,“下一页”等分页所需要的连接,示例代码如下所示。
上述代码创建了三个Label控件,这三个控件并无需初始化,这三个控件通过编程实现上一页,下一页的分页形式。如果需要执行分页,则需要编写cs页面代码,cs页面代码如下所示。
上述代码初始化PagedDataSource对象,并将分页控件默认初始化属性Visible为false。其中PagedDataSource是封装分页相关属性的类。
上述代码通过传递的Page的值进行分页操作,如果传递的Page的值为不为空,则从数据源控件中读取相应的数据,并显示到数据绑定控件中。
上述代码通过PagedDataSource对象实现了分页效果,并且将分页条目数设置为3,当数据超过3条时,则会实现分页。运行后如图9-17和图9-18所示。
图9-17 实现下一页效果
图9-18 实现上一页效果
DataList控件虽然不支持分页,但是能够通过编程实现DataList控件的分页效果。DataList控件在模板编辑和代码开发上虽然没有GridView方便,但是却提高了灵活性,能够自定义分页和数据显示。
9.6.5 使用SQLHelper操作数据库
使用控件,能够方便开发人员的开发和使用,但是很多情况下,不能使用控件来实现,所以很多情况都需要使用ADO.NET操作数据库中的数据,SQLHelper是将ADO.NET中对数据操作的类和对象进行的封装的一个类库,使用SQLHelper能够提高数据库操作的效率。
1.创建SQLHelper
SQLHelper类经常在数据库开发中使用,不仅封装了数据库操作,也提高了数据库操作的安全性,SQLHelper在微软的开发中和DEMO中经常被使用,SQLHelper通常用于多层设计,如果需要使用SQLHelper类,可以到微软官方下载最新的SQLHelper类,也可以自行编写SQLHelper类。如果自行创建SQLHelper类,则在解决方案管理器中新建一个类库,如图9-19所示。
创建类库后,删除自动生成的Class1类,并创建一个新类,类名为SQLHelper,如图9-20所示。
图9-19 添加类库
图9-20 创建SQLHelper类
如果使用下载的SQLHelper类,则可以单击解决方案管理器,单击右键,选择添加现有项,然后选择现有项目添加即可。在SQLHelper类下对数据操作进行封装,开发人员能够使用自己封装的类进行数据操作,示例代码如下所示。
在上述代码中,还需要通过一个枚举类型进行switch操作,枚举类型用于判断执行的操作,示例代码如下所示。
定义的枚举类型用于在程序中进行筛选操作,用于指定SQL语句执行的操作。在SQLHelper类中,还需要封装DataReader方法进行DataReader的封装和实现,开发人员能够使用SQLHelper类中的DataReader方法进行数据库的读取,示例代码如下所示。
上述代码实现了DataReader对象,使用DataReader能够填充SqlDataReader对象并进行数据的循环输出。在ADO.NET中,通常需要执行SQL语句进行数据库的操作,在SQLHelper类中,同样需要封装执行SQL语句的操作以便能够快速执行数据操作。
上述代码编写了SQLHelper类操作数据库的函数,通过执行函数并传递参数,即可实现数据库的插入、更新和删除。
2.使用SQLHelper
创建完成SQLHelper类后,需要为应用程序配置SQLHelper的基本属性,代码如下所示。
上述代码为SQLHelper类配置了属性,当使用SQLHelper类时,系统会自动连接数据库,在完成使用后,系统会自动关闭数据库。如果需要在当前项目使用SQLHelper类,则需要添加引用来使用SQLHelper类,右击现有项目,在下拉菜单中选择【添加】选项,在【添加】选项中选择【现有项】选项,在弹出窗口中选择【项目】标签栏,就可以添加相同项目的类库,如图9-21所示。
图9-21 添加引用
引用添加完毕,在使用SQLHelper页面的CS页面中,需要添加命名空间,命名空间的名称和创建类库的名称相同,如果需要更改名称,可以通过修改类库的属性来修改。示例代码如下所示。
引用完毕后,就可以执行SQL语句,使用SQLHelper执行SQL语句非常方便,下面代码演示了如何执行插入、删除操作。
上述代码运行后,则会执行插入操作,相比于ADO.NET,封装后的代码更加简便易懂,删除操作代码如下所示。
当需要执行SELECT语句时,可以通过SQLHelper.DataAdapter获取数据,示例代码如下所示。
上述代码通过SQLHelper.DataAdapter获取数据,并创建了一个mydatatable虚拟表,填充DataSet对象。当需要获取DataSet对象中的数据时,和普通的DataSet对象一样。SQLHelper封装了ADO.NET中的许多方法,为开发人员提高了效率,同时也增加了安全性和模块化的特性。
注意:上述代码中的SQLHelper类能够执行的是SQL语句,如果需要执行存储过程,则需要更改SQLHelper类中的相应的CommandType属性的值。
9.6.1 制作用户界面(UI)
使用数据控件和数据源控件显式数据,则需要为控件制作相应的用户界面,让数据控件对用户呈现的效果更好。首先,需要使用创建数据绑定控件GridView和数据源控件,并配置数据源控件,如图9-6所示。
图9-6 配置数据源控件和数据绑定控件
显然,对于用户而言,该数据源控件和数据绑定控件显然很不友好,这里就需要对数据绑定控件的界面进行修改。通过配置数据绑定控件的相应格式可以修改数据绑定控件的外观,如图9-7所示。
图9-7 编辑数据绑定控件界面
开发人员能够自定义数据绑定控件的样式,并且修改某些列的顺序,这里使用了自动套用格式,并将数据绑定控件的width属性设置为100%,这样编写宽度就能够适应浏览器的大小,从而随着浏览器的大小而改变。数据绑定控件配置完成后,值得注意的是,需要勾选SQL语句的高级选项,让数据绑定控件支持编辑、删除和选择,如图9-8所示。
图9-8 SQL高级选项
配置SQL高级选项后,数据源控件就会自动生成INSERT、UPDATE、DELETE语句,示例代码如下所示。
+展开
-HTML
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:mytableConnectionString %>"
DeleteCommand="DELETE FROM [mynews] WHERE [ID] = @ID"
InsertCommand="INSERT INTO [mynews] ([TITLE]) VALUES (@TITLE)"
SelectCommand="SELECT * FROM [mynews]"
UpdateCommand="UPDATE [mynews] SET [TITLE] = @TITLE WHERE [ID] = @ID">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="TITLE" Type="String" />
<asp:Parameter Name="ID" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="TITLE" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
ConnectionString="<%$ ConnectionStrings:mytableConnectionString %>"
DeleteCommand="DELETE FROM [mynews] WHERE [ID] = @ID"
InsertCommand="INSERT INTO [mynews] ([TITLE]) VALUES (@TITLE)"
SelectCommand="SELECT * FROM [mynews]"
UpdateCommand="UPDATE [mynews] SET [TITLE] = @TITLE WHERE [ID] = @ID">
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="TITLE" Type="String" />
<asp:Parameter Name="ID" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="TITLE" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
在完成用户界面的配置后,系统生成的HTML代码如下所示。
+展开
-HTML
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF"
BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="ID"
DataSourceID="SqlDataSource1" GridLines="Horizontal" Width="100%">
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="TITLE" HeaderText="TITLE" SortExpression="TITLE" />
</Columns>
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" />
</asp:GridView>
AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF"
BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="ID"
DataSourceID="SqlDataSource1" GridLines="Horizontal" Width="100%">
<FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="TITLE" HeaderText="TITLE" SortExpression="TITLE" />
</Columns>
<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
<AlternatingRowStyle BackColor="#F7F7F7" />
</asp:GridView>
开发人员可以编写以上HTML实现更多的效果,当确定用户界面编写完毕后,就可以为数据绑定控件选择操作了。
9.6.2 使用GridView显示、删除、修改数据
配置完成用户界面,则需要选择GridView控件的属性并配置GridView任务,如图9-9和图9-10所示。
图9-9 默认GridView任务
图9-10 选择GridView任务
GridView控件支持分页、排序、编辑、删除和选定内容等操作。在GridView控件中,首先必须勾选【分页】复选框,然后再配置PageSize属性才能够让GridView控件支持分页功能。在GridView控件属性中如果勾选了【分页】复选框而不配置PageSize属性,则默认按10条数据分页。勾选了以启用分页、启用编辑、启用删除和启用选定内容后,GridView控件的界面如图9-11所示。
图9-11 编辑数据绑定控件界面
因为在数据源控件配置的过程中,已经配置了支持编辑、删除和选择,所以在数据绑定控件中可以选择启用编辑,启用删除和选定内容等操作,并且系统默认支持更新、插入、删除等操作,运行后如图9-12所示。
图9-12 GridView控件显式
GridView控件支持编辑、删除和选择,当单击编辑时,能够对选择的行进行数据编辑,如图9-13所示。编辑完成后,单击更新按钮则可以执行更新操作,而无需手动编写UPDATE操作,如图9-14所示。
图9-13 编辑数据
图9-14 执行更新操作
当单击删除时,则会执行DELETE命令,而无需手动编写DELETE命令。GridView控件支持分页、排序、编辑、删除和选定内容,开发人员无需手动编写更新、删除、编辑、也无需手动编写分页,对GridView控件进行缓存设置能够提高应用程序性能,在对数据库的操作,编辑及更新中,GridView控件能够方便开发人员,简化代码。
9.6.3 使用DataList显示数据
DataList控件需要编辑HTML模板来显式数据,虽然在开发上,DataList控件比GridView更加复杂,但是DataList控件能够实现更多效果。相比之下,DataList控件比GridView控件更加灵活,能够进行复杂的事件编写和样式控制。选择【自动套用格式】复选框并将DataList控件的宽度设置为100%,编辑基本的用户界面,如图9-15所示。
图9-15 DataList控件显式数据
通过编辑ItemTemplate能够实现自定义模板,而无需像GridView一样,以表格形式呈现,编辑后运行如图9-16所示。
图9-16 编写ItemTemplate模板
DataList控件执行数据操作基本上同GridView一样,DataList控件与GridView相比只下,有着更灵活的模板方案,能够实现更多的显示效果。
9.6.4 DataList分页实现
DataList控件本身并不带分页实现,如果需要DataList能够实现分页效果,则需要通过代码实现DataList控件的分页。DataList控件分页需要增加若干标签(Label)控件来显式“上一页”,“下一页”等分页所需要的连接,示例代码如下所示。
+展开
-HTML
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
上述代码创建了三个Label控件,这三个控件并无需初始化,这三个控件通过编程实现上一页,下一页的分页形式。如果需要执行分页,则需要编写cs页面代码,cs页面代码如下所示。
+展开
-C#
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = this.SqlDataSource1.Select(new DataSourceSelectArguments());
objPds.AllowPaging = true;//设置是否允许分页
objPds.PageSize = 3;//设置分页条目数
int CurPage;//设置当前页码
Label2.Visible = false;//隐藏标签
Label4.Visible = false;
objPds.DataSource = this.SqlDataSource1.Select(new DataSourceSelectArguments());
objPds.AllowPaging = true;//设置是否允许分页
objPds.PageSize = 3;//设置分页条目数
int CurPage;//设置当前页码
Label2.Visible = false;//隐藏标签
Label4.Visible = false;
上述代码初始化PagedDataSource对象,并将分页控件默认初始化属性Visible为false。其中PagedDataSource是封装分页相关属性的类。
+展开
-C#
if (Request.QueryString["Page"] != null)//如果传递的页面不为空
{
CurPage = Convert.ToInt32(Request.QueryString["Page"]); //获取传递的参数
}
else
{
CurPage = 1;//页面的值为1
}
objPds.CurrentPageIndex = CurPage - 1;//设置索引
Label2.Visible = true;//显式标签
Label4.Visible = true;
Label3.Text = "<a href=\"datalist.aspx\">首页</a>"; //编写分页
Label2.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage + 1) + "\">下一页</a>";
Label4.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage - 1) + "\">上一页</a>";
{
CurPage = Convert.ToInt32(Request.QueryString["Page"]); //获取传递的参数
}
else
{
CurPage = 1;//页面的值为1
}
objPds.CurrentPageIndex = CurPage - 1;//设置索引
Label2.Visible = true;//显式标签
Label4.Visible = true;
Label3.Text = "<a href=\"datalist.aspx\">首页</a>"; //编写分页
Label2.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage + 1) + "\">下一页</a>";
Label4.Text = "<a href=\"datalist.aspx?page=" + Convert.ToString(CurPage - 1) + "\">上一页</a>";
上述代码通过传递的Page的值进行分页操作,如果传递的Page的值为不为空,则从数据源控件中读取相应的数据,并显示到数据绑定控件中。
+展开
-C#
if (CurPage == 1)//如果只有一个页面
{
Label4.Visible = false;//隐藏标签
}
if (objPds.IsLastPage)
{
Label2.Visible = false;
}
DataList1.DataSourceID = "";//重新绑定数据
DataList1.DataSource = objPds;//编写DataList的数据源
DataList1.DataBind(); //绑定数据源
{
Label4.Visible = false;//隐藏标签
}
if (objPds.IsLastPage)
{
Label2.Visible = false;
}
DataList1.DataSourceID = "";//重新绑定数据
DataList1.DataSource = objPds;//编写DataList的数据源
DataList1.DataBind(); //绑定数据源
上述代码通过PagedDataSource对象实现了分页效果,并且将分页条目数设置为3,当数据超过3条时,则会实现分页。运行后如图9-17和图9-18所示。
图9-17 实现下一页效果
图9-18 实现上一页效果
DataList控件虽然不支持分页,但是能够通过编程实现DataList控件的分页效果。DataList控件在模板编辑和代码开发上虽然没有GridView方便,但是却提高了灵活性,能够自定义分页和数据显示。
9.6.5 使用SQLHelper操作数据库
使用控件,能够方便开发人员的开发和使用,但是很多情况下,不能使用控件来实现,所以很多情况都需要使用ADO.NET操作数据库中的数据,SQLHelper是将ADO.NET中对数据操作的类和对象进行的封装的一个类库,使用SQLHelper能够提高数据库操作的效率。
1.创建SQLHelper
SQLHelper类经常在数据库开发中使用,不仅封装了数据库操作,也提高了数据库操作的安全性,SQLHelper在微软的开发中和DEMO中经常被使用,SQLHelper通常用于多层设计,如果需要使用SQLHelper类,可以到微软官方下载最新的SQLHelper类,也可以自行编写SQLHelper类。如果自行创建SQLHelper类,则在解决方案管理器中新建一个类库,如图9-19所示。
创建类库后,删除自动生成的Class1类,并创建一个新类,类名为SQLHelper,如图9-20所示。
图9-19 添加类库
图9-20 创建SQLHelper类
如果使用下载的SQLHelper类,则可以单击解决方案管理器,单击右键,选择添加现有项,然后选择现有项目添加即可。在SQLHelper类下对数据操作进行封装,开发人员能够使用自己封装的类进行数据操作,示例代码如下所示。
+展开
-C#
#region //数据库连接串
private static readonly string database = “数据库”;//配置数据库信息
private static readonly string uid = “用户名”;//配置用户名信息
private static readonly string pwd = “密码”;//配置密码信息
private static readonly string server = “服务器”;//配置服务器信息
private static readonly string condb = "server='"+ server +"';database='" + database + "';uid=
'" + uid + "';pwd='" + pwd + "';Max Pool Size=100000;Min Pool Size=0;
Connection Lifetime=0;packet size=32767;Connection Reset=false; async=true";//设置连接字串
#endregion
#region//DataAdapter方法 返回DataSet数据集
/// <summary>
/// DataAdapter方法 返回DataSet数据集
/// </summary>
/// <param name="sqlCmd">SQL语句</param>
/// <param name="command">操作参数 枚举类型</param>
/// <returns></returns>
public static DataSet DataAdapter(string sqlCmd, SDACmd command,//实现适配器
string tabName, params SqlParameter[] paraList)
{
SqlConnection con = new SqlConnection(condb);//创建连接对象
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con; //使用连接对象
cmd.CommandText = sqlCmd;//配置连接字串
if (paraList != null)
{
cmd.CommandType = CommandType.Text;//配置Command类型
foreach (SqlParameter para in paraList)//遍历参数
{ cmd.Parameters.Add(para); }//添加参数
}
SqlDataAdapter sda = new SqlDataAdapter();//创建适配器
switch (command)//查找条件
{
case SDACmd.select://如果为select执行
sda.SelectCommand = cmd;
break;
case SDACmd.insert://如果为insert执行
sda.InsertCommand = cmd;
break;
case SDACmd.update://如果为update执行
sda.UpdateCommand = cmd;
break;
case SDACmd.delete://如果为delete执行
sda.DeleteCommand = cmd;
break;
}
DataSet ds = new DataSet();//创建数据集
sda.Fill(ds, tabName);//填充数据集
return ds;//返回数据集
}
private static readonly string database = “数据库”;//配置数据库信息
private static readonly string uid = “用户名”;//配置用户名信息
private static readonly string pwd = “密码”;//配置密码信息
private static readonly string server = “服务器”;//配置服务器信息
private static readonly string condb = "server='"+ server +"';database='" + database + "';uid=
'" + uid + "';pwd='" + pwd + "';Max Pool Size=100000;Min Pool Size=0;
Connection Lifetime=0;packet size=32767;Connection Reset=false; async=true";//设置连接字串
#endregion
#region//DataAdapter方法 返回DataSet数据集
/// <summary>
/// DataAdapter方法 返回DataSet数据集
/// </summary>
/// <param name="sqlCmd">SQL语句</param>
/// <param name="command">操作参数 枚举类型</param>
/// <returns></returns>
public static DataSet DataAdapter(string sqlCmd, SDACmd command,//实现适配器
string tabName, params SqlParameter[] paraList)
{
SqlConnection con = new SqlConnection(condb);//创建连接对象
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con; //使用连接对象
cmd.CommandText = sqlCmd;//配置连接字串
if (paraList != null)
{
cmd.CommandType = CommandType.Text;//配置Command类型
foreach (SqlParameter para in paraList)//遍历参数
{ cmd.Parameters.Add(para); }//添加参数
}
SqlDataAdapter sda = new SqlDataAdapter();//创建适配器
switch (command)//查找条件
{
case SDACmd.select://如果为select执行
sda.SelectCommand = cmd;
break;
case SDACmd.insert://如果为insert执行
sda.InsertCommand = cmd;
break;
case SDACmd.update://如果为update执行
sda.UpdateCommand = cmd;
break;
case SDACmd.delete://如果为delete执行
sda.DeleteCommand = cmd;
break;
}
DataSet ds = new DataSet();//创建数据集
sda.Fill(ds, tabName);//填充数据集
return ds;//返回数据集
}
在上述代码中,还需要通过一个枚举类型进行switch操作,枚举类型用于判断执行的操作,示例代码如下所示。
+展开
-C#
public enum SDACmd { select, delete, update, insert }//定义枚举类型
定义的枚举类型用于在程序中进行筛选操作,用于指定SQL语句执行的操作。在SQLHelper类中,还需要封装DataReader方法进行DataReader的封装和实现,开发人员能够使用SQLHelper类中的DataReader方法进行数据库的读取,示例代码如下所示。
+展开
-C#
public static SqlDataReader ExecReader(string sqlcmd, params SqlParameter[] paraList)
{
SqlConnection con = new SqlConnection(condb);//创建连接对象
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con; //使用连接
cmd.CommandText = sqlcmd;//配置SQL语句
if (paraList != null)
{
cmd.CommandType = CommandType.Text;//配置Command类型
foreach (SqlParameter para in paraList)
{ cmd.Parameters.Add(para); }//添加参数
}
con.Open();//打开连接
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sdr;
}
{
SqlConnection con = new SqlConnection(condb);//创建连接对象
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con; //使用连接
cmd.CommandText = sqlcmd;//配置SQL语句
if (paraList != null)
{
cmd.CommandType = CommandType.Text;//配置Command类型
foreach (SqlParameter para in paraList)
{ cmd.Parameters.Add(para); }//添加参数
}
con.Open();//打开连接
SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sdr;
}
上述代码实现了DataReader对象,使用DataReader能够填充SqlDataReader对象并进行数据的循环输出。在ADO.NET中,通常需要执行SQL语句进行数据库的操作,在SQLHelper类中,同样需要封装执行SQL语句的操作以便能够快速执行数据操作。
+展开
-C#
public static void ExecNonQuery(string sqlcmd, params SqlParameter[] paraList)
{
using (SqlConnection con = new SqlConnection(condb))//创建连接对象
{
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con;//使用连接
cmd.CommandText = sqlcmd;//配置执行类型
if (paraList != null)
{
cmd.CommandType = CommandType.Text; //配置执行类型
foreach (SqlParameter para in paraList)
{ cmd.Parameters.Add(para); }//添加参数
}
con.Open();//打开数据连接
cmd.ExecuteNonQuery();//执行SQL语句
}
}
{
using (SqlConnection con = new SqlConnection(condb))//创建连接对象
{
SqlCommand cmd = new SqlCommand();//创建Command对象
cmd.Connection = con;//使用连接
cmd.CommandText = sqlcmd;//配置执行类型
if (paraList != null)
{
cmd.CommandType = CommandType.Text; //配置执行类型
foreach (SqlParameter para in paraList)
{ cmd.Parameters.Add(para); }//添加参数
}
con.Open();//打开数据连接
cmd.ExecuteNonQuery();//执行SQL语句
}
}
上述代码编写了SQLHelper类操作数据库的函数,通过执行函数并传递参数,即可实现数据库的插入、更新和删除。
2.使用SQLHelper
创建完成SQLHelper类后,需要为应用程序配置SQLHelper的基本属性,代码如下所示。
+展开
-C#
private static readonly string database = "mytable";//配置数据库
private static readonly string uid = "sa";//配置用户名
private static readonly string pwd ="sa";//配置用户会密码
private static readonly string server = "local"; //配置服务器的值
private static readonly string uid = "sa";//配置用户名
private static readonly string pwd ="sa";//配置用户会密码
private static readonly string server = "local"; //配置服务器的值
上述代码为SQLHelper类配置了属性,当使用SQLHelper类时,系统会自动连接数据库,在完成使用后,系统会自动关闭数据库。如果需要在当前项目使用SQLHelper类,则需要添加引用来使用SQLHelper类,右击现有项目,在下拉菜单中选择【添加】选项,在【添加】选项中选择【现有项】选项,在弹出窗口中选择【项目】标签栏,就可以添加相同项目的类库,如图9-21所示。
图9-21 添加引用
引用添加完毕,在使用SQLHelper页面的CS页面中,需要添加命名空间,命名空间的名称和创建类库的名称相同,如果需要更改名称,可以通过修改类库的属性来修改。示例代码如下所示。
+展开
-C#
using MYSQL;
引用完毕后,就可以执行SQL语句,使用SQLHelper执行SQL语句非常方便,下面代码演示了如何执行插入、删除操作。
+展开
-C#
string strsql = "insert into mynews values ('SQLHelper插入标题')";//编写SQL语句
SQLHelper.ExecNonQuery(strsql);//执行SQL语句
SQLHelper.ExecNonQuery(strsql);//执行SQL语句
上述代码运行后,则会执行插入操作,相比于ADO.NET,封装后的代码更加简便易懂,删除操作代码如下所示。
+展开
-C#
string strsql2 = "delete form mynews where id=3";//编写SQL语句
SQLHelper.ExecNonQuery(strsql2); /执行SQL语句
SQLHelper.ExecNonQuery(strsql2); /执行SQL语句
当需要执行SELECT语句时,可以通过SQLHelper.DataAdapter获取数据,示例代码如下所示。
+展开
-C#
string strsql = "select * from mynews where id=3";//编写SQL语句
DataSet ds = SQLHelper.DataAdapter(strsql, SQLHelper.SDACmd.select, "mydatatable");
DataSet ds = SQLHelper.DataAdapter(strsql, SQLHelper.SDACmd.select, "mydatatable");
上述代码通过SQLHelper.DataAdapter获取数据,并创建了一个mydatatable虚拟表,填充DataSet对象。当需要获取DataSet对象中的数据时,和普通的DataSet对象一样。SQLHelper封装了ADO.NET中的许多方法,为开发人员提高了效率,同时也增加了安全性和模块化的特性。
注意:上述代码中的SQLHelper类能够执行的是SQL语句,如果需要执行存储过程,则需要更改SQLHelper类中的相应的CommandType属性的值。
加支付宝好友偷能量挖...