首先说明,因为刚学不久,很多编程知识都不了解,我只能按照我掌握的方法写。不排除有更好的方法,欢迎大家指出。一开始学习C#的同时实践一个个人博客项目。一开始把返回数据的代码写在UI层。这是我编辑自己所写文章的后台代码。代码如下,cmd_sort的reader对象返回类别表的类别信息并绑定到DDL_sort(下拉框)
cmd_art的reader对象返回当前所选文章的属性。并给下拉框和单选框设置默认选项,代码正常工作。
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BOZConnectionString"].ConnectionString)) ;
try
{
SqlCommand cmd_sort = new SqlCommand("SELECT sort FROM sort", conn);
SqlCommand cmd_art = new SqlCommand("SELECT id, title, diary_time, sort, diary_text, heart FROM article WHERE (GUID = @GUID)", conn);
cmd_art.Parameters.Add("@GUID", SqlDbType.UniqueIdentifier).Value = new Guid(Request.QueryString["GUID"]);
conn.Open();
SqlDataReader reader_sort = cmd_sort.ExecuteReader();
while (reader_sort.Read())
{
for (int index = 0; index < reader_sort.FieldCount; index++)
{
DDL_sort.Items.Add(new ListItem(reader_sort["sort"].ToString()));
}
}
reader_sort.Close(); SqlDataReader reader_art = cmd_art.ExecuteReader();
while (reader_art.Read())
{
diary_title.Text = reader_art["title"].ToString();
diary_daytime.Text = string.Format("{0:d}", reader_art["diary_time"]);
DDL_sort.Items.FindByValue(reader_art["sort"].ToString().Trim()).Selected = true;
RBL_heart.Items.FindByValue(reader_art["heart"].ToString().Trim()).Selected = true;
Editor1.Text = Server.HtmlDecode(reader_art["diary_text"].ToString());
}
reader_art.Close();
} catch (Exception ex)
{
Response.Write(ex.Message);
} finally
{
conn.Close();
}
后来学习了分层架构的思想。打算把连接代码封装进进DAL.cs里。我参照了我的一个成功案例。
public SqlDataReader Show_Message()
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["BOZConnectionString"].ConnectionString);
String sto = "Select_Message";
SqlCommand cmd = new SqlCommand(sto, con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}但是由于源代码有2个reader对象。如果封装到类里,只能有一个返回值,我尝试了用返回对象数组的方法。结果失败大家说这样的情况如何解决?写两个return reader的方法分别返回?效率会不会低下
cmd_art的reader对象返回当前所选文章的属性。并给下拉框和单选框设置默认选项,代码正常工作。
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BOZConnectionString"].ConnectionString)) ;
try
{
SqlCommand cmd_sort = new SqlCommand("SELECT sort FROM sort", conn);
SqlCommand cmd_art = new SqlCommand("SELECT id, title, diary_time, sort, diary_text, heart FROM article WHERE (GUID = @GUID)", conn);
cmd_art.Parameters.Add("@GUID", SqlDbType.UniqueIdentifier).Value = new Guid(Request.QueryString["GUID"]);
conn.Open();
SqlDataReader reader_sort = cmd_sort.ExecuteReader();
while (reader_sort.Read())
{
for (int index = 0; index < reader_sort.FieldCount; index++)
{
DDL_sort.Items.Add(new ListItem(reader_sort["sort"].ToString()));
}
}
reader_sort.Close(); SqlDataReader reader_art = cmd_art.ExecuteReader();
while (reader_art.Read())
{
diary_title.Text = reader_art["title"].ToString();
diary_daytime.Text = string.Format("{0:d}", reader_art["diary_time"]);
DDL_sort.Items.FindByValue(reader_art["sort"].ToString().Trim()).Selected = true;
RBL_heart.Items.FindByValue(reader_art["heart"].ToString().Trim()).Selected = true;
Editor1.Text = Server.HtmlDecode(reader_art["diary_text"].ToString());
}
reader_art.Close();
} catch (Exception ex)
{
Response.Write(ex.Message);
} finally
{
conn.Close();
}
后来学习了分层架构的思想。打算把连接代码封装进进DAL.cs里。我参照了我的一个成功案例。
public SqlDataReader Show_Message()
{
SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["BOZConnectionString"].ConnectionString);
String sto = "Select_Message";
SqlCommand cmd = new SqlCommand(sto, con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}但是由于源代码有2个reader对象。如果封装到类里,只能有一个返回值,我尝试了用返回对象数组的方法。结果失败大家说这样的情况如何解决?写两个return reader的方法分别返回?效率会不会低下
每次返回一个用就行了