这道题选DB,但是你也许并不太懂kindle整个过程,那个byval是什么意思?s(x)又是什么意思?谢谢各位大佬

收集的.Net文章(十七)--.Net开发中的感受 - 兴百放 - 博客园
我的图书馆
收集的.Net文章(十七)--.Net开发中的感受 - 兴百放 - 博客园
.Net开发中的感受
1:在.net开发中通常文件都放在不同的文件夹中
& 所以在开发的时候 就必须注意 在引用命名空间 类型的是时候一定要加上路径 否则就会访问不到
& example:blog.cs.Menu1& title = new blog.cs.Menu1();
&& 这是在blog命名空间 cs文件夹 下面的Menu1类 如果不加上cs文件夹就不可以
using System.C
using System.D
using System.Data.SqlC
namespace blog.cs
&/// &summary&
&/// Menu 的摘要说明。
&/// &/summary&
&public class Menu1
& public Menu1()
&& // TODO: 在此处添加构造函数逻辑
& public SqlDataReader getclass()
&&&&&&&&&&&
&& SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
&& SqlCommand Comm = new SqlCommand("StoreMenu",Conn);
&& Comm.CommandType = CommandType.StoredP
&& Conn.Open();
&& SqlDataReader result = Comm.ExecuteReader(CommandBehavior.CloseConnection);
我在运行上面的类的程序的时候 出现ConnectionString没有初始化的提示 后来我才知道原来这是
可以有如下方法可以解决
a:在config文件中写上下面这个
&& &appSettings&
&&& &add key="ConnectionString" value="server=Luid=pwd= dataBase= Global" /&
&&& &/appSettings&
b:可以改成下面这中形式:
& public SqlDataReader getclass()
&&&&&&&&&&& string cnnstr="server=uid=pwd=database=Global";
&&&&&&&&&&& SqlConnection Conn =new SqlConnection(cnnstr);
&& //SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
&& SqlCommand Comm = new SqlCommand("StoreMenu",Conn);
&& Comm.CommandType = CommandType.StoredP
&& Conn.Open();
&& SqlDataReader result = Comm.ExecuteReader(CommandBehavior.CloseConnection);
3:对于组建开始不不知道 刚才找到了原来可以定义他的高度和宽度这样就可以 定义定义它的大小
& 然后方便放置
4:一个页中只能够放一一个表单& 如果把一个控件里面有表单 在把它放在另外一个页中如果也有表单
& 这样就会产生冲突,所以就要删掉一个表单
5:Calendar的使用:
& 它必须放在表单内像下面这样
& &form id="Form1" method="post" runat="server"&
&& &asp:Calendar id="Calendar1" style="Z-INDEX: 101; LEFT: 144 POSITION: TOP: 128px"
&&& runat="server"&&/asp:Calendar&
& 如果没有表单就运行会出现如下提示
& 类型“Calendar”的控件“Calendar1”必须放在具有 runat=server 的窗体标记内。
6: string strsql2 = "select * from Favorites";
&& //OleDbCommand MyComm = new OleDbCommand(strsql,MyConn);
&& OleDbDataAdapter da=new OleDbDataAdapter(strsql2,MyConn);
&& DataSet ds=new DataSet();&
&& da.Fill(ds,(RsCount-1)*PageSize,PageSize,"Favorites");
&& MyRepeater.DataSource=ds.Tables["Favorites"];
&& MyRepeater.DataBind();
&& 对与上面的da.Fill和ds.Tables["Favorites"];&&
7:ALTER PROCEDURE Liuyan
& @parameter1 datatype = default value,
& @parameter2 datatype OUTPUT
&select Count(*) From I_LiuYan
&这是一个存储过程语句 只想说名的是Count(*)返回I_LiuYan的条数
7:& 我对三层结构的理解
&&& 我觉得三层是彼此打交道 然后互不干涉,
&&& 像写储蓄过程 如果你把表见得没有问题 然后你的语句没有写错 你完全可以只在里面
&&& 单独的调试 如果没有问题的话& 所以的输入 你可以在运行中输入
&&& 而输出也是你看得到了& 如果有问题 则运行会提示
&&& 如果你看的输入输出没有问题 那就是ok了 所以对于这一层 你的不要去管了
&&& 而对于类型 就是一个类下面的一个方法的操作
&&& 在这个方法里面 我们可以想它传递参数 然后连接数据库,并把Command的执行的时候
&&& 调用储蓄过程,通过这样去访问数据库(其实我觉得也可以在这里不调用 这就做成了二层结构了)
&&& 这个时候 如果有参数的话 我们应该先向储蓄过程传递进参数 这个时候储蓄过程,会接收
&&& 传递来的参数然后运行事先我们设定的语句 得到我们想要的值 然后在返回给这个方法里设定接收的参数
&&& 然后在有次方法通过return语句送出去
&&& 而对与第一层其实就是一个向第二层传递参数 同时把返回来的参数绑定的过程了
&&& 一般先会新建一个要调用类的实例,然后由这个实例去调用这个类小下面的方法
&&& 然后该方法返回的数据 和数据控键进行绑定
&&& 我想把这三层的功能和作用理解了
&&& 如果有问题的话 我们根据它们各自的功能和作用就很容易知道
&&& 是那个环节出了问题
8: 对于表单提交的问题
&& 如果组件中有表单 并且在组键所放的文件夹中也有表单 这个时候就会产生冲突
&& 并且在实际中我发现 如果让把日历做成一个组键这个时候 如果在日组键中放上
&& 表单 把该组键所放文件的表单去掉 尽管能够执行但是会提示网页上有错误
&& 这个时候就是把& 解决的办法就是把组键中的表单去掉 只留主文件中一个表单
&& 第一:这样方便了这个主页 可以放多个组键 都可以在这个页面的表单提交
&& 第二:系统只允许一个页面放一个表单&
& int TotalP
&& int ClassBlog = 1;
&&& //Int32.Parse(Request.Params["F_Id"]);&
&& string Cnnstr="server=pwd=uid=dataBase=Global";&&&&&
&&&&& string Cmdstr = "select Count(*) From I_LiuYan where I_Class ='"+ClassBlog+"'";&&&
&&&&&&&&&&& SqlConnection Cnn = new SqlConnection(Cnnstr);
&&&&&&&&&&& Cnn.Open();
&&&&&&&&&&& SqlCommand Cmd = new SqlCommand(Cmdstr,Cnn);
&& int TotalRecord =(int)Cmd.ExecuteScalar();
&& Cnn.Close();
&& if((TotalRecord%PageSize)&0)
&&& TotalPage=TotalRecord/PageSize+1;
&&& TotalPage=TotalRecord/PageS
& 此段语句告诉我的是怎么样数据库里返回一个值并对它进行计算
& int TotalRecord =(int)Cmd.ExecuteScalar();
& 上此语句很重要 起关键作用是用Cmd.ExecuteScalar()执行查询并返回结果的第一行第一列
& 并把它定义为int类型 存放于TotalRecord的变量中
10:step1.visible="true"
&& step1代表的是任何的控件 很多的控件都有.visible的性质 它代表的是
&& 如果该控件是否显示出来& 这个性质很重要 必须记住 很多地方都有用途
11:Dim sql as String
&&&&&&&&&& Dim myconn as OleDbConnection
&&&&&&&&&& Dim myCmd as OleDbCommand
&&&&&&&&& Function getdatareader(str as String) as OleDbDataReader
&&&&&&&&&&&& myCmd=New OleDbCommand(str,myConn)
&&&&&&&&&&&& myConn.open()
&&&&&&&&&&&& getdatareader=myCmd.ExecuteReader()
&&&&&&&&& End Function
&&&&&&&& function executesql(sql as string)
&&&&&&&&&&&& myCmd=new OleDbCommand(sql,myConn)
&&&&&&&&&&&& myConn.open()
&&&&&&&&&&&& myCmd.ExecuteNonQuery()
&&&&&&&&&&&& myConn.close()
&&&&&&&&& end function
&&&& 这是在vb中看到的 我觉得值得学是在数据库操作的时候 怎么样把连接数据库的语句绑定到
&&&& 一个事件中 注意事件一中把getdataReader看成了是一个OleDbDateReader的类型了
12:其实我觉得一份好的开发文挡 必须
&& a:尽量少用数据表
&& b:还有有必要进行参数传递分析
&& c:功能分析
&& d:排版分析
13://对存储过程的分析:实例
&&&&&& //string G_name ,string G_password为传递给此存储过程的参数,string Loging表示方法名和类型
& public string Login(string G_Name ,string G_Passord)
&& SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppeSettings["ConnectionString"]);
& //此为连接语句
&& ConfigurationSettings.AppeSettings["ConnectionString"]
&& 表示从Configurantion加载了一条连接语句
&& Config里的语句为
&& &appSettings&
&&&&&&&& &add key="ConnectionString" value="server=Luid=pwd= dataBase= Global" /&
&&&&&&& &/appSettings&
&&&&&&&& &system.web&
&& 注意此标是放在&system.web&的上面
&& SqlCommand Comm = new SqlCommand("Login",Conn);
&&&&&&& //新建一个SqlCommand的实例Comm并把它标记为储蓄过程名为Login。
&& Comm.CommandType =CommandType.StoredP
&&&&&&& //将Comm标记为储蓄过程
&&&&&&& //下面为存储过程添加参数
&& SqlParameter parameterG_name = new SqlParameter("@G_name",SqlDbType.NVarChar,20);
&&&&&&& // 新建了一个SqlParameter的储蓄过程参数实例:实例名为pranmeterG_name
& //并定义了一个名为"@G_name"的参数名,定义类型SqlDbType为NvarChar 字节数为20;
&& parameterG_name.Value=G_N
&&&&&&& //为参数实例parameterG_name赋值 为这个值是从方法Login中传递进来的值
&&&&&&& //注意parameterG_name.Value=G_name 中的G_name和语句new SqlParameter("@G_name",SqlDbType.NVarChar,20);
&&&& //中的@G_name是不同,@G_name是为一个SqlParameter的储蓄过程定义的一个参数名
&& Comm.Parameters.Add(prarameterG_name);
&&&&&&& // 为Comm为添加参数paratemterG_name
&& SqlParameter parameterG_password = new SqlParameter("@G_password",SqlDbType.NVarChar,20);
&& parameterG_password.Value=G_
&& Comm.Parameters.Add(parameterG_password);
&& SqlParameter parameterG_Id = new SqlParameter("@G_Id",SqlDbType.Int,4);
&& parameterG_Id.Direction = ParameterDirection.O
&&&&&&&&&&& // parameterG_Id.dDirection 获取或者设置一个值,该值指示指示参数是只可
&  & //只可以输入,只可以输出,双向 还是存储过程返回值参数
&&&&&&&&&&& //ParameterDirection.O定义了此参数为输出参数
&& Comm.Parameters.Add(paramerG_Id);
&&&&&&&&&&&
&& //打开连接并执行Command命令
&& Conn.Open();
&& Comm.ExecuteNonQuery();
&& Conn.Close();
&&&&&&&&&&&
&& //对获得parameterG_Id.Value的值进行处理
&& int G_id =(int)(parameterG_Id.Value);
&& if(G_id==0)
&&& //返回空
&&& retrun G_id.ToString();
&&& //将此信息转换为等效字符串的表现形势
14:其实我发现在代码的编写过程中,一定要自己写 不要老看出 先把它写出来 在运行去改
&& a:理解的东西很容易写出来
&& b:然后要是写什么文本框名的 这个时候就可以参照定义的文本框名什么的& 这个网页都有
15:在自定义颜色里 可以进行色彩的调配这是运用所学的美术知识的一个很好的地方
&& 这样可以模似美术里的调色
16:怎么样在代码中做弹出警告
&&&&& Response.Write("&script&alert(\"成功\")&/script&")
17:以前对字段的名字不明白 想在建设数据库表的时候 也提到字段
现在觉得比能够理解 其实就是一个对象 像建设留言本 L_Id,L_Name,L_Note
&&& 这些都是字段他们有容量 就是字节了 然后字段有类型啊 现在好理解了
18: string Cmdstr = "select Count(*) From I_LiuYan where I_Class ='"+ClassBlog+"'";
&&& Label4.Text=C
&&& 差点忘记一个调试的技巧了 可以把sql语句输出来检查错误
19:想显示不同类的标题的时候 类下面的标题专题还没有选择啊 这个时候可以这样解决
这个方法有一定通用性:
public void Page_Load(object sender, System.EventArgs e)
&& if(!IsPostBack)
&&& BindGrid(a);
&&&&&&&&&&
& private void BindGrid(int RsCount)
&&&&&&&&&&&&&&&& //处理的数据 
& 当页面加载的时候 我们可以设定传递一个参数给BindGrid
& 如果我们以后再调用BindGrid,并传递参数给BindGrid参数 
达到我们想选择类的目的
20:在开发中我发现可以把绑定数据源,可以做成那种滚动的效果
&& 我知道的有Pepeater里绑定的数据源
21:一个值得学习的例子
&&&&&&&&&&& SqlDataAdapter da= new SqlDataAdapter(strsql2,Cnn1);
&& da.Fill(ds,(RsCount-1)*PageSize,PageSize,"I_LiuYan");
&& /*对da.Fill的理解,以前对这个不是理解,不过现在比较明白了
&&& 这是参加da.Fill 里的系统提示 同时结合自己实践理解的
&&&& Fill()里有四个参数,第一个表示DataSet 第二个表示填充的标,而第二个RsCount-1)*PageSize
&&&& 表示分页的起始页,第三个参数PageSize表示每一页显示记录的条数。
&& int ex =(RsCount-1)*PageS
&& Label3.Text=ex.ToString();
&&&&&&&&&& 而第而条语句 ex.tongstring();告诉我的是很多时候 我们为了看清楚语句的执行情况
&&&&&&&&&& 可以先把他转换成字符串然后再显示出来
22:LinkButton的灵活运用
&&& 前台代码
&&& &asp:linkbutton id="PageFirst" runat="server" Text="首页" CommandArgument="First"&首页&/asp:linkbutton&
&&& &asp:linkbutton id="PagePrev" runat="server" Text="上一页" CommandArgument="Prev"&上一页&/asp:linkbutton&
&&& &asp:linkbutton id="PageNext" runat="server" Text="下一页" CommandArgument="Next"&下一页&/asp:linkbutton&
&&& &asp:linkbutton id="PageLast" runat="server" Text="最后一页" CommandArgument="Last"&最后一页&/asp:linkbutton&
&&& 后台代码:
&&& private void InitializeComponent()
&& this.PageFirst.Click += new System.EventHandler(this.PageCut_Click);
&& this.PagePrev.Click += new System.EventHandler(this.PageCut_Click);
&& this.PageNext.Click += new System.EventHandler(this.PageCut_Click);
&& this.PageLast.Click += new System.EventHandler(this.PageCut_Click);
&& this.Label1.Load += new System.EventHandler(this.Page_Load);
&& this.Load += new System.EventHandler(this.Page_Load);
& #endregion
& private void PageCut_Click(object sender, System.EventArgs e)
&& LinkButton lb =(LinkButton)
&& //这里是为声明lb为System.Web.UI.WebControls.LinkButton
&& String commangArg=lb.CommandArgument.ToString();
&& /* 这里获得LinkButton的属性值,这里根据不同的LinkButton触发不同的事件从而
&&& 获得不同LinkButtton的属性值&
&&& 我觉得这里也是很值得学习的 是一个很好的学习点
&& switch(commangArg)
&&& case"First":
&&&& BindGrid(1);
&&& case "Prev":
&&&& BindGrid(int.Parse(Label1.Text)-1);&
&&& case "Next":
&&&& BindGrid(int.Parse(Label1.Text)+1);
&&& case "Last":
&&&& BindGrid(int.Parse(Label2.Text));
&&& default:
&&&&& 要说这里值得学的就是我觉得对LinkButton的灵活运用,甚至还可以引用到其他控件
19:Response.Redirect("../blog/index.aspx");中的Response相对服务器的绝对路径 所以
&& 这个时候我我们要使用绝对路径 但是如果我们使用是其他控件 像链接按纽 我们就可以
&& 写成这样的路径:../index.aspx
&&&&&&&&&&
&18:对三大控件的分析小的归纳
&& 1:DataGrid控件中的列的类型包括5中:BoundColumn ButtonColumn& EditCommandColumn
&& HyperLinkColumn TemplateColuMn
&&& BoundColumn:表示绑定到数据源中的一个字段,同时使用样式显示在DataGrid表格中,其中
属性DataField表示其对应的数据源字段或者属性,DataFormatString表示该字段显示的格式
ReadOnly表示该列为只读,即无法编辑,BoundColumn为DataGrid控件的默认的列类型
//评论:这就是说它是绑定到每一个列的第一个字段
&&& ButtonColumn即按纽列,表示该列中每一项为一个用户自定义的按纽,如添加按纽等,
其中,属性ButtonType表示所以显示按纽的类型,默认值为LinkB CommandName
&&& 表示单击该按纽的时候所执行的命令,DataTextField表示绑定到ButtomColumn中按纽的
Text属性的字段名,Text表示按纽上所执行的标题
//评论:它没有说绑定到那里位置放在那里就在那里 但是告诉了我们绑定的是按纽
&&& EditCommandColumn是一种特殊的列类型,它包含了用于编辑每行数据的各种编辑命令按纽
如果编辑取消等等,其中,属性ButtonType表示要显示的按纽的类型,默认为值为LinkButton
&&& EditText:表示在编辑按纽上显示的文本 
UpdataText表示在更新按纽上显示的文本
&&& CancelText表示在“取消”按纽上显示的文本
&&& //表示对数据库里每天一行的编辑 其实就是在这里面完成的,像更新,编辑,取消 等等
&&& HyperLinkColumn即超级链接列,用于创建绑定到数据字段值的超级链接的列,其中属性
&&& DataNavigteUrlField:表示DataSource中对象的字段或属性,它提供了所要链接到的Url
&&& DataNavigateUrlFormatString:用于设置Text属性的显示格式;
DataTextField:用于设置列Text属性的数据源
NavigateUrl:表示要链接到的页的Url地址
Targe:表示显示链接页的目标窗口如:top,blank
&&& Text:表示超链接文本
// 我觉得这个属性就是其实就是告诉你怎么样把数据库里的某一字段放在表里,并且这个并且
把它做成链接啊 可以对它链接的Url地址 目标窗口 包括他链接时候 传递的数据源
以及链接文本的显示格式。 
&&& TemplateColumn即模板列,其所以建的列允许使用自定义html元素和控键的模板来定义控件的布局
&&&&&&&& EditItemTemplate:用于定义该列处于编辑状态时候的html元素和控件
&&&&&&&& FooterTemplate:用于定义该列注脚编辑状态时的HTML元素和控件
&&&&&&&& HeaderTemplate:用于定义列标头的HTML元素和标签,
&&&&&&&& ItemTemplate:用于定义该列显示的HTM元素
&&& //这中用法我还没有用过但是我想这应该是在html标签中自定义模板列,
&&&&& 看以以后的例子吧
&&& //总结
&&&&& 我发现这个四个属性分别定义了绑定列,链接,按纽,模板,按纽,特殊列。还有定义各种对事件进行操作的列
&&&&& 其中链接为链接到其他地址,按纽是定义各种按纽事件,模板支持自定义 而绑定列就是把数据绑定到第一个字段&&&
&&&&& 注意:BoundColumn绑定的是行而其他的是列
&&&&& DataGrid控件主要用于一表格的方式来显示数据,它允许用户定义各种类型的列以控制网格单元
&&&&& 格内容的布局,并添加特定的功能
& 2:DataList控件
&&& DataList控件主要用通过模板来显示数据,Datalist控件所显示的数据格式,都可以通过模板
&&& 和样式来定义,这也是DataList控件与DataGrid控件,Repeater控件最大的不同
&&& DataList控件所提供的模板包括:
&&& AlternatingItemTemplate:主要用于控件交替行所显示的文本和控件样式
&&& EditItemTemplate:主要用于控制处于编辑状态下的项文本和控件样式
&&& FoolterTemplate:主要用于控制的脚注所显示的文本的样式
&&& HeaderTemplte:主要用于控件DataList标头所显式的文本和控件样式
&&& ItemTemplate:主要用于控件DataList控件中每一行所显示的样本和格式
&&& SelectedItemTemplate:主要用于控件用户所选中的DataLsit控件的一项所显示的文本和控件样式
&&& SeparatorTemplate:主要用于控制DataList控件中各项间分隔符的样式
&& //其实我觉得书上说的很对 Datalist主要是通过定义模板来显示数据,它通过定义不同模板
&&& 来控制:在不状态下,交替行,编辑,所选中行 所以显示的文本和格式
&&& 还有定义控件脚注和标头的样式,总的来说通过定义不同的模板,可以自定义DataList控件的
&&& 外观来内容
& 3:Pepeater控件
&&& Pepeater控件的主要功能是以更自由的方式 来控制数据显示,也就是说可以使用非表格的形式来
&&& 显示数据,从而灵活的定义自己的风格
&&& pepeater就一个基本的容器控件,它没有内置的布局或样式,不具有固定的外观,因此该控件
&&& 的模板内显式地声明所有的HTML布局,格式设置有样式标记,Repeater控件没有内置的选择和编辑支持
&&& 可以通过ItemCommand事件处理从模板引发到该控件的控件事件 所以点击它的属性的时候
你会发现 好多它的属性没有 因为主要是靠自己去定义
  HeaderTemplate:定义头标签,在实际中我发现 这个标签是它可以给表格取一个标题
但是他不能够绑定数据
FooterTemplate:定义脚标签,在实际中我发现 这个标签是它可以给表格取一个标题
但是他不能够绑定数据
&&& //我觉得Pepeater主要是支持自定义功能
& 总结上述:DataList DataGrid pepeater 三种数据控件各有各的特色,但是相同的是,他们绑定
一个数据源,为数据源中的每一条记录生成一个条目,他们都是以列表的形式来显示条目
&&&&&&&&&&&&&&&&&&&&&&&
& 20: ordery by&& I_name ASC 所谓ASC应该是按照字母的大小写 排序&&
 21:SqlParameter parm1=new SqlParameter("@Titel",SqlDbType.VarChar,20);
&& parm1.Value=this.TextBox6.T
此段语句告诉我们的是怎么样文本框中获得值并放到并作为参数放到parm1中
 22:SqlParameter parm1=new SqlParameter("@I_Id",SqlDbType.Int);
&&& parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
&&& comm.Parameters.Add(parm1);
&&& 常常会看要用到获得主键的值,比如我们用DataGrid 绑定一个表,这个时候我们想用
点击那一行 就获得那一行的主键,这个时候
因此我们需要为DataGrid指定一个DataKeyField(前台代码中)告诉它,
我的表的主键就是这个字段,在绑定了以后DataGrid的DataKeys就存储数据
了列表控件中每个记录的主键,所以取的时候用索引
this.DataGrid1.DataKeys[e.Item.ItemIndex]来取就可以得到主键
  注意在前太代码中必须有:DataKeyField="I_Id"不然是获不到主键的
&23: 对 SqlDataReader result = Comm.ExecuteReader(CommandBehavior.CloseConnection);
&&&& 语句的解析
&&&&& 中ExecuteReader为返回一个SqlDataReader对象,这里是返回给result,而result
&&&&& 必须声明为SqlDataReader,提供对查询结果和和查询对数据库影响的说明
&24:有的时候看到他们写代码 很快 很流利,但是仔细想象 只要把三层关系 各种块搞清楚了 其实也就很简单的
&&& 首先 数据库建表:开发者要对整个系统表的字段,属性,说明 表名 能够记得清楚 建起表来就简单了
&&&&&&&& 存储过程写法:把sql语句理解了 如果不知道可以查询sql帮助文件,然后剩下的事情就很简单了
&&&&&&&& 类文件写法:(其实也就是连接数据库的文件的写法)我觉得把连接数据库的一个类,以及他们的关系
&&&&&&&&&&&&&&&&&&&&& 理解清楚了,就可以很好的写出来了
&&&&&&&& 第二层的cs文件的写法:这里的文件基本上要知道怎么样调用类行文件(这个比较简单)
&&&&&&&&&&&&&&&&&&&& 同时能够知道引用各种建的对象(像按纽什么的)这个新建的对象在文件中都有定义的
&&&&&&&&&&&&&&&&&&&& 然后要知道C#语言(基本上用的是一些条件什么的控制语句)去控制这些对象
&&&&&&&& 前台:很简单了
&&&&&&&& html层:这里的觉得 其实的没有问题 就是对那三个时间绑定控件的属性还要搞一下才好。&&&&&&&&&&&&&&&&&&
&25:今天在开发中,发现在《解决方案资源管理器》 上面的查看代码,视图设计器中 这几个选项目
&&&& 很好使用,它可以方便的我在前台与后台之间 像以前那样去点击视图窗口上面去找&&&&&&&&
&26:以前对Panel这个小兵 并不是很注意 因为觉得应该太小 不太注意吧
&&& 其实仔细想想它还是关键时候起作用的 它能够做为其他控件的容器,我们可以利用它的属性
&&& 可以达到显示和隐藏控件的目的
&27:直接从数据库获得时间的写法:(getdate())
&&&& 在文件中声明时间变量:DateTime now = DateTime.N
&28:对与时间的使用就要用到 now这个对象,点击它你会发现有很多的属性和方法
&&& 包括对日期的加,获得不同的时间 还有进行时间的转换都在这里,所以找到now 你就可以
&&& 一个对时间处理的法宝
&29:我觉得在开发个人博客系统中有一个感受 就是需求分析是最重要的,所以一个好的需求分析能够为你以后的开发扑平了道路
&&& 我觉得应该按照这样的步骤去开发:
&&& a:掌握本网站的体现的思想
&&& b:写好系统功能文档
&&& c:在数据库里建好所有的表
&&& d:写好所有的存储过程语句
&&& e:写好所有的类型文件
&&& f:建各种模块,前台
&&& h:进行系统的调试
&&& j:与美工设计前台进行对接
&30:在类型文件中:using System.C
&&& SqlConnection Conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
&&& 中的(ConfigurationSettings.AppSettings["ConnectionString"])无效
&&& 如果不用引用直接用的话 可以这样写
&& SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
&31:& public void Del_Click(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
&&& SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
&&& SqlCommand comm=new SqlCommand("delete from L_LeaveWord where L_Id=@L_Id",conn );
&&& SqlParameter parm1=new SqlParameter("@L_Id",SqlDbType.Int);
&&& parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
&&& comm.Parameters.Add(parm1);
&&& conn.Open();
&&& comm.ExecuteNonQuery();
&&& conn.Close();
&&& SetBind();
&& catch(System.Exception exc)
&&& Response.Write(exc.Message);
& 这段程序在运行的时候 如果索引值小于0就会出错误,但是如果加上try-catch就不仅能够保证页
& 面的正常运行 还每个把错误信息显示在页面上&&
&& function makesql()
&& select case xianzhi.SelectedItem.value
&&&&& case "0"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,regtime) values('"&
sitename.text &"','" & picurl.text &"','"& siteurl.text
&"',"& xianzhi.SelectedItem.value &","&
place.SelectedItem.value &","& opentype.SelectedItem.value
&",'"& now() &"')"
&& case "1"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,clicks,regtime)
values('"& sitename.text &"','" & picurl.text
&"','"& siteurl.text &"',"& xianzhi.SelectedItem.value
&","& place.SelectedItem.value &","&
opentype.SelectedItem.value &","& cint(click.text)
&",'"& now() &"')"
&& case "2"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,shows,regtime) values('"&
sitename.text &"','" & picurl.text &"','"& siteurl.text
&"',"& xianzhi.SelectedItem.value &","&
place.SelectedItem.value &","& opentype.SelectedItem.value
&","& cint(show.text) &",'"& now() &"')"
&& case "3"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,lasttime,regtime)
values('"& sitename.text &"','" & picurl.text
&"','"& siteurl.text &"',"& xianzhi.SelectedItem.value
&","& place.SelectedItem.value &","&
opentype.SelectedItem.value &","& enddate.text &",'"&
now() &"')"
&& case "4"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,clicks,lasttime,regtime)
values('"& sitename.text &"','" & picurl.text
&"','"& siteurl.text &"',"& xianzhi.SelectedItem.value
&","& place.SelectedItem.value &","&
opentype.SelectedItem.value &","& cint(click.text)
&",'"& enddate.text &"','"& now() &"')"
&& message.text=sql
&& case "5"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,shows,lasttime,regtime)
values('"& sitename.text &"','" & picurl.text
&"','"& siteurl.text &"',"& xianzhi.SelectedItem.value
&","& place.SelectedItem.value &","&
opentype.SelectedItem.value &","& cint(show.text) &",'"&
enddate.text &"','"& now() &"')"
&& case "6"
&&&&& sql="insert into
ads(sitename,picurl,url,class,place,window,clicks,shows,lasttime,regtime)
values('"& sitename.text &"','" & picurl.text
&"','"& siteurl.text &"',"& xianzhi.SelectedItem.value
&","& place.SelectedItem.value &","&
opentype.SelectedItem.value &","& cint(click.text) &","&
cint(show.text) &",'"& enddate.text &"','"& now()
&& end select
&& return sql&
& end function
& 此例子是用vb做的 但是很值得学习,因为它告诉了我怎么样对数据库不同的查询进行控制,很有意思&&&
& 33: replace的使用&
举个简单例子
str="abcdef"
s=replace(str,"bc","xy")
结果s="axydef"
附Replace 函数详细介绍
返回字符串,其中指定数目的某子字符串被替换为另一个子字符串。
Replace(expression, find, replacewith[, compare[, count[, start]]])
Replace 函数的语法有以下参数:
expression 必选。 字符串表达式 包含要替代的子字符串。&
find 必选。被搜索的子字符串。
replacewith 必选。用于替换的子字符串。
start 可选。expression 中开始搜索子字符串的位置。如果省略,默认值为 1。在和count 关联时必须用&
count 可选。执行子字符串替换的数目。如果省略,默认值为 -1,表示进行所有可能的替换。在和 start 关联时必须用。
compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,缺省值为 0 ,这意味着必须进行二进制比较。
compare 参数可以有以下值:
常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。
Replace 返回以下值:
如果 Replace 返回
expression 为零长度 零长度字符串 ("")。
expression 为 Null 错误。
find 为零长度 expression 的副本。
replacewith 为零长度 expression 的副本,其中删除了所有由 find 参数指定的内容。
start & Len(expression) 零长度字符串。
count 为 0 expression 的副本。
&34:在开发中有一个这样的发现;如果我做一个组件 在里面建一个表 但是很难定位
&&& 因为它不是嵌套在html中的 所以我可以拖动表 后来我才发现原来& 原来这个问题
&&& 因为在编辑的时候 你拖动表的时候可以进行定位 这个定位座表 在编译平台有显示
35:在开发中遇到这样的一个难题 我做内容显示的时候,只想显示一部分 开始不知道怎么做&&
&& 不过现在知道了,当时我想到是不是可以对从数据库里,找出的数据绑定字段进行操作
&&& 现在知道了,其实这个完全可以做到的
&&& 这里有二中方法:
&&&& a: select left(内容,6) 姓名,性别 from 表
&&&& b: Text='&%# substring((string)DataBInder.Eval(Container, "DataItem.title"))%&'
&&&&&&& public string substing(sting sss)
&&&&&&& {& if( sss.Length&2)
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&& return sss.Substring(0,6)+"...";
&&&&&&&&&&&& }
&&&&&&&&&&& else
&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&& }
&&&&&&&& }
&36:怎么样把自符串转换成为为它等效的整数形式:
&& Example: int.Parse(Label1.Text)
&37:昨天出现了一个小的问题:害的我今天搞了一个下午 不过终于找到原因了
&&& 程序是这样的:
&&&&& if(int.Parse((Label1.Text)+1)&int.Parse(Label2.Text))
&&&&& BindGrid(int.Parse(Label1.Text)+1);
细看此程序没有什么错误:可是当我LabeL获得int.Parse((Label1.Text)+1)的值得时候 出现了成十倍增长的数字
&& 如果:11,21,31,。。。
&& 开始一直觉得莫名其妙,后来无意去掉后面那个"+1"发现可以正确显示翻页,最后终于发现是把1写进了int.Parse()
&& 的括号里了,其实正确写法应该是 if(((int.Parse(Label1.Text))+1)&int.Parse(Label2.Text));
&38:今天发现了一个新功能 在组建里可以放组件 这到是以前我没有想到了 这确实给我带来许多方便了
&&& 现在看编程也可以相通的地方,这里做的组件 也相于flash里的元件,但是值得注意的是我们不能够
&&& 直接连接到一个ascx页面
& 39:想从前台获得一个id, 并且知道id类型的是int
&&& 于是我是这样写的代码:
前台:&%#substr((int)DataBinder.Eval(Container.DataItem,"I_Id"))%&
后台: public string substr(int sss)
&& Response.Write("&script&alert(\"成功\")&/script&");
&& Label3.Text=sss.ToString();
结果在运行的时候出现这样错误提示:无法将内容隐式转换为
&&& 其实这种错误提示我是经常能够看到的 在调试过程中。
在这次调试过程中 我在想 是不是 用return 不能够返回int型 或者还有一个可能那就是
return 只能够返回sting
于是我将作了以下更改:|| reurn 23; || int a=24;return&||bool a=23;
&&& 我终于发现用所有的数值类型都回出现和上面一样的错误提示:
但是如果我把a定义为sting 并赋给它一个字符串值的时候 我发现就可以了
所以我觉得return应该是只能够字符串(当然这只是在.net中,我也还没有真正的去证实,看以后去检验了
&&& 在C#中是不存在这个问题的)
40:怎么样从存储过程中取值:并进行判断
&&& int i_AdminID = (int)parameterAdminID.V
&& if (i_AdminID == 0)
&&& return i_AdminID.ToString();   
41:在.net编程过程中我几乎在忘记一个概念 开始在搞操作 那就是忘记了一个类可以调用另一个类
&&&& 的方法,类与类 等等在C#里学的那些& 在这里是可以灵活运用的
42:在程序的调试中经常会出现这样那样的错误提示:还有一个很好的方法 就是直接将错误提示
&& 放在google中去搜 就可以了
43:除了Session() Request& 之外还有一个可靠 传参数的方法:Server.Transfer
44:trim:为掉字符前后的空格
45:今天在开中发现好象 我们可以利用文本输入框的属性控制输入的字符的数量 觉得这是很有用的
46:对类层过程的再一次理解,就是对从存储过程里传递来的数据进行接受(也可以处理)并传回,
&& 并从把从前台获得的数据传递给存储过程
47:注意在写语句的过程中遇到写一些参数的时候,你写到那个参数那个提示就会变成黑体&&
48:如果像那种声明实体的语句,如果你在等号前段打对了语句 那么在new 关键字之后系统的提示
&& 将自动定位到你声明的那种实体
49:因为刚才在用like做模糊查询的时候,因为一其他的原因 让我怀疑是like的错误 所以找了我
&& 很久 不过后来终于发现是没有模糊查询的变量没有传递进来 我开始还以为是从输出语句看不到
&& 变量是因为没有显示后来才知道这是因为没有获得变量的原因。
&& 现在对sql语句作一个小结:
&& like存储过程中的写法为:
&&&&&&&&&& (& @Search nvarchar(255) )
&&&&&&&&& AS
&&&&&&&&&& SELECT Count(*)
&&&&&&&&&&& FROM I_LiuYan
&&&&&&&&& WHERE (I_Title LIKE '%'+@Search+'%' ) OR
&&&&&&&&& (I_Note LIKE '%' + @Search + '%')OR
&&&&&&&&& (I_Man& LIKe '%' +@Search+'%' )
&&&&&&&&&& group by
&&&&&&&&& I_Lytime&&
&&&&&&&&&&&&&&&&&&
&&& RETURN
&&& //注意这里的1:like是@search 2:分别用二个单引号围住like, 3:用一个加号围住@Search
&&&&& 4:多个like语句中间or& 5:排序用group
&&& 在cs类型文件中的写法为:
&&&& string strsql="select I_Id,I_Title,F_Id,I_Note,I_Man,I_PinglunNumber,I_Lytime from I_LiuYan";
&&&& string strsql2=strsql+" where I_Title like'%"+Search+"%'or I_Note like'%"+Search+"%'or I_Man like'%"+Search+"%'";
&&&& //1:这里和在存储过程中在like部分只有Search前面去掉了@
&&&&&& 2:这里还有一点要注意的是,也是经常容易出问题的是,如果sql字符太长,这个时候我们就要
&&&&&&&& 进行字符串的连接,其实目的很简单就是要把二个字符串连接,所以我们要做的这样的工作
&&&&&&&& a:把每一段sql前后加上引号这样就能够确保这段sql是字符串,
&&&&&&&& b:还要注意的就是因为在sql语句中有的时候 是需要空格的 如果这个时候我们在连接的
&&&&&&&&&& 的时候很容易的把这个空格去掉了像上面 I_LiuYan和where中间是需要空格的 但是如果
&&&&&&&&& 在strsql2的语句 where前我们不加上空格就很会变化成 I_LiuYanwhere这样就会出错误
&&&&&&&&& 所以我们一定要几住 在连接每一条sql语句的时候前面要上空格
50:今天知道其实获得客户断的IP很容易,但是我们却可以利用这个功能做很多的事情
&& 如果做统计访问人数,控制一台计算机上重复登陆等等,
51:今天突然在网上看到其实在前台显示的字符串,也可以通过样式去控制实现 不过我没有试过
52:经常看到类型似于这样的Link方面的句子:
&& 可是很容易写错: 现在对其作一个小结:
&&&& Number1:&asp:HyperLink Id="HyperLink1" Runat="server"
NavigateUrl='&%#"../ShowIndex.aspx?F_Id="+DataBinder.Eval(Container.DataItem,"F_Id")%&'
Text ='&%# DataBinder.Eval(Container.DataItem,"F_Name")%&'/&
&&&& Number2:&
&&&&&&&&&&& &td&
&&&&& &%#DataBinder.Eval(Container.DataItem,"I_Lytime")%&
&&&&&&&&&&& &/td&
&&&& 首先分析Number2:对与绑定的数据字符我们要用引号如:"I_Lytime"
&&&& 而它前面是Container.DataItem,我想应该是数据集 Container.DataItem,"I_Lytime"
&&&& 告诉的是从数据集里面取出一个数据字节,当然数据集里的字是绑定从数据库从传来的
&&&& DataBinder.Eval绑定的标志,说明这是一个绑定,和前面连起来的意思就是说,从数据
&&&& 库取出的字节的存放在Container.DataItem里,这里取出了I_Lytime进行绑定
&&&& 而&%# %&是绑定的标志 注意在Number2 这样就可以了 括号外面不要加引号了
&&&& 直接放在标签中就可以了
&&&& 但是如果要把它作为一个值附给一个对象的某个属性 那么就应该在前面加上引号
&&&& 像Text ='&%# DataBinder.Eval(Container.DataItem,"F_Name")%&' 一样
&&&& 那么加引号 到底是单引号 还是双引号呢,这里有一个规则:就是从里到外 以双引号
&&&& 开始,外面一层加单引号,单引号外面在加双引号,这样递归。。
&&&& example: 在sql语句的中的表现:
&&&& string strsql="select I_Id,I_Title,F_Id,I_Note,I_Man,I_PinglunNumber,I_Lytime from I_LiuYan";
&&&& string strsql2=strsql+" where I_Title like'%"+EndSearch+"%'or I_Note like'%"+EndSearch+"%'or I_Man like'%"+EndSearch+"%'";
&&& 而对与asperLink控件中
&&& NavigateUrl的用法就只注意: 1:NavigateUrl等号另一边 必须要加上引号,因为它是作为一个属性,其实在
&&& 上面举的例子也一样,Text ='&%# DataBinder.Eval(Container.DataItem,"F_Name")%&'数据绑定也加上引号了
&&& 另外一个要注意的就是对于要传递的参数的存放的变量 和引的页也必须加上引号
&&& 所以就出现了:"../ShowIndex.aspx?F_Id=" 就上引号的现象,对于绑定的数据是不要加上引号 只是里面的数据字段
&&& 要加上所以就有这样的了在NavigaterUrl后面:DataBinder.Eval(Container.DataItem,"F_Id")
&&&& 当然为了连接在DataBinder前面要加上“+”的连接字符标志
& 53:平时老以为是写sql查询语句的时候一定要根据数据表里的字节排列顺序来写
&&&&& 如:数据表里有I_Id,I_title二条记录,写select的时候不一定要
&&&&&&&&& 这样写: select top 10 I_Id,I_title& from& I_LiuYan order by& I_Lytime
&&&&&&&&& 其实也可以这样写:
&&&&&&&&&&&&&&&&&& select top 10 I_title I_Id& from& I_LiuYan order by& I_Lytime
& 54:对与sql语句涉及的东西太多 针对经常写错 再一次写一点体会
&&&& 1:sql语句把它看作为一个字符串,所以前后要加上引号,
&&&& 2:在sql语句里面 如果是表里面的字节就不用加上引号
&&&& 3:如果不是的经常出现变量 就要加上三层东西 如: L_Mode='"+Mode+"'
&&&&&&&& 第一层为:+ //注意不能够者空格,或者是&字符
&&&&&&&& 第二层为:双引号
&&&&&&&& 第三层为:单引号
&&&&&&& 当然这只是大多数的 如果想有like'%"+EndSearch+"%' 这样的语句 就不同了
&&&&&&& 同时在Vb中其要求也有小的变化
&& 55:开始以为C# 区分大小写不是很好,不过现在却觉得相反了 其实这样挺好的因为可以通过变化大小写命名
这样挺方便的&&
56: 通过这一段时间的实战
体会到如下好处
a:使用组件:可以让我省了在多个页面编写同样的代码
b:使用存储过程:即可以提高系统运行速度 同时还能够对sql语句进行集中统一管理 更改 起来比较方便
c:建立类型文件:可以对和存储过程打交道的语句进行集中统一管理
d:.net平台:不同以往的任何平台,集中开发提高了开发效率
e:采用与句绑定 即可以重复利用代码 也可以有利于结构化编程
&& 57:一个控制数据库表显示条数的一个方法
SqlConnection Cnn1 = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
string strsql="select * From I_LiuYan";
& Cnn1.Open();
& DataSet ds = new DataSet();
& SqlDataAdapter da= new SqlDataAdapter(strsql,Cnn1);
& da.Fill(ds,(RsCount-1)*PageSize,PageSize,"I_LiuYan");
& #region
& /*这里有一个值得注意的地方,我本来是要查询出10条记录
& & 可是我查询表是这样写的select * 并没有说只查询出十条记录
&  这是我的目的答到了,表中只显示出十条记录,我晕了,神仙
&  在帮我吧,后来我知道了不是的,原来是
&  da.Fill(ds,(RsCount-1)*PageSize,PageSize,"I_LiuYan");
&   语句在作怪,PageSize,为1,既每一个页面显示的记录数为1;
&  而通过我定义TotalRecord=10控制了RsCount-1其实页
&   从而间接的达到了,控制显示数据表记录条数的目的
&   #endregion
&   Repeater1.DataSource=ds.Tables["I_LiuYan"];
&   Repeater1.DataBind();
&   DataT
&   t=ds.Tables["I_LiuYan"];
&   Label1.Text=RsCount.ToString();
&   Label2.Text=TotalPage.ToString();
&   ds.Clear();
&&&& Cnn1.Close();
&& 58:开始对想查询最新记录 可是我查到的却是最早的记录 用top 后来才想到用DESC 这样的话就可以查到最新的了
&&&& select top 10 P_Name,I_Id from& P_PingLun ORder by I_Id DESC ;
&& 59:网站配置可以分为以下几种配置:
&&&&& 公共模块类:即主要是类型的cs文件
&&&&& 网站样式类:主要指css
&&&&& 数据访问类: 主要指数据库访问的封装
&&&&& 网站配置文件:web.config的配置
&&&&& 上面这些方面 它的意义是具有全局性的,所以说特别数据库访问的封装,既让我感觉到
&&&&& 比较新鲜,也让觉得确实能够提高工作效率,并且有利于结构化编程
&& 60:一定要弄懂网站配置的问题 重点是config文件,这个太重要了
&&&&& 很多时候 把比人的文件拿到自己机子上不能够运行 这真上太郁闷的事情了
&& 61:对控件的启用不关闭的控制
&&&&& Example:
&&&&&& private void PageInit()
&& int nState = int.Parse(TxtState.Text);
&&&&&&&&&&& //TxtState.Text是在各中按纽事件调用该事件的时候传递过来的值
&& PalView.Visible = (nState != 0) ? true:
&& PalArticle.Visible = (nState == 0) ? true:
&& BtnAdd.Enabled = (nState == 0 || nState == 1) ? true:
&& BtnDel.Enabled = (nState == 0 || nState == 1) ? true:
&& BtnSave.Enabled = (nState == 2 || nState == 3) ? true:
&& BtnCancel.Enabled = (nState == 1 || nState == 2 || nState == 3) ? true:
&&& //上面这些是对在操作的时候 各种控件进行可用不可用的控制
&&&&&&&&&&&&&&&&& //其实我觉得在这里我学的一个方法就是对控件的用与否的控制问题
&&& //也觉得了我一个对我网站前面组件的显示与否的控制问题
&&&&&& 调用此方法:
&&&&&&& private void BtnAdd_Click(object sender, System.EventArgs e)
&& TxtState.Text = "2";
&& PageInit();
&& Clear();
&&&&&&& 开始对这个不是很理解,PageInite()调用了此方法, 是BtnAdd_Click这个事件,
&&&&&&& 但是在PageInit()中按钮BtnAdd.Enabled = (nState == 0 || nState == 1) ?
&&&&&&& true:它只有1和0啊,后来我是终于明白了是怎么回事了,其实在这里
&&&&&&& 在调用这个方法的时候,通过TxtState.Text=2;语句把TxtState.Text的值设为2
&&&&&&& 这样在整个方法PageInit()方法中
&&&&&&& 对于上述按纽,如果有nState=2并且为Ture的可以执行&&&
&&& 62:对config的理解:
&&&&&&& 因为以前其他的编程语言做出的东西,放在服务器上,存在比较烦琐的配置的问题
&&&&&&& 但是在.net就不同了 它把这些放在一个config的文件中,这样我们就可以只通过
&&&&&&& 配置config,从而达到在是放在服务器上web程序能够运行
&&& 63:对dll文件的理解
&&&&&&& dll文件是经过编译的,这样的好处就是能够使别人看不到自己的原代码,特别是
&&&&&& 如果我公司做的软件是放在服务器上 服务器管理员 是看不到我的程序源代码的
&&&&&&& 同时 我可以通过更改dll文件 从而达到更改服务器上文件的目的
&&& 64:这次做系统有一个体会 最好把各个模块的文件 放在一个文件夹中
&&& 65:出错页面是在congfig中定义
&&& 66:关与怎么样把文件存在数据库 ,本来以前对这个问题不是很清楚,
&&&&&&& 但是现在可以对其做一个总结了
&&&&&&& 一般要把文件存进数据库 应该取得客服端文件的三个方面的数据
&&&&&&& a:文件名:
&&&&&&&&& imgUploadedName = UploadFile.PostedFile.FileN
&&&&&&&&& 这只是取得文件的完全限定名
&&&&&&&&& 在对其加工,取得文件的真正名
&&&&&&&& (这里可以获得用户自己命明的)
&&&&&&&&& imgName_value = GetLastRightOf(" \\",imgUploadedName );
&&&&&&&&&& public string GetLastRightOf(string LookFor,string myString)
&& int StrP
&& StrPos = myString.LastIndexOf(LookFor);
&& return myString.Substring(StrPos + 1);
&& //如果文件名输入文本没有输入,则从上取得上传的问件名
&& //当然这是通过GetLastRightOf获得真正的上传文件的问奖名
&&&&&&&& 这样得到的文件名就是最后的文件名 imgName_value就可以直接
&&&&&&&&& 存到数据库了
&&&&&&& b:获得文件的数据类型
&&&&&&&&& imgContentType = UploadFile.PostedFile.ContentT
&//获得文件的类型
&&&&&&&&& 这样得到了imgContenType 就可以直接存到数据库里了
&&&&&&&&& 注意这个类型没有特别的要求 只要数据库里类型定义为
&&&&&&&&& Varcahr 就可以了
&&&&&&& c:正式读取文件
&&&&&&&&&& 这是一重点也是整个文件存到是数据库的关键
&&&&&&&&&& 这里的步骤为:
&&&&&&&&&& 1:Stream imgS//提供字节序列的一般视图
&&&&&&&&&&&&& imgStream& = UploadFile.PostedFile.InputS
&&&&&&&&&&&&& //UploadFile为上传文件文本框的文件名
&&&&&& //PostedFile为获得由客户端指定上传文件的访问 其实就是说服务器它能够访问指定的文件
&&&&&& //InputStream 获取一个System.IO.Stream对象,该对象指向一个上载文件,以准备读取该文件的内容
&&&&&&&&&&&&& 这一小步就可以对文件读取进行准备
&&&&&&&&&&&&&& int n = imgStream.Read(imgBinaryData, 0, imgLen);&
&&&&&& //imgStream为开始在前面建立的对象用来准备读取文件的内容。
&&&&& //Read正式读取字节 这里是对imgStream的重写 因为开始它的里面是没有东西的
&&&&&&&&&& 2:imgLen =& UploadFile.PostedFile.ContentL
&&&&& //UploadFile.PostedFile.ContentLength
&&&&&&&&&&&&& 获取上载文件的字节大小
&&&&&&&&&&&
&&&&&&&&&& 3:byte[] imgBinaryData=new byte[imgLen];
&&&&&& //把字节大小转化为byte[]的类型& 并把它存放于imgBinaryData中
&&&&&&&&&&&&&& 其实2是为3服务的
&&&&&&&&&& imgBinaryData 就是最后得到文件的数据
&& 67: 对于数据绑定控件DataGrid 有绑定经常会用到一些绑定控件属性 这些属性上控制表的
&&&&&& 现在对此作一个总结:
&&&&&& 1:GrdFile.Items.Count 是获取这个控件绑定放项的数目,如果是翻页的 就是指
&&&&&&&&& 这个页面的绑定的数目,打个比方如果第一页有9个项目 那GrdFile.Items.Count
&&&&&&&&& 返回的就是9了 如果是第二页 只有1个 那rdFile.Items.Count返回的就是1
&&&&&& 2:GrdFile.Items[i] 这里返回的就是表里记录的条数 当然也可以说对象的条数,
&&&&&&&& 这里和上面Items.Count不同 它返回的就是在GrdFile在每一个页的总的数量
&&&&&&&& 而GrdFile.Items[i]就不同 它也是指向第几个对象
&&&&&&&& 注意:1:它和页面没有关系 例如:如果第二个页 每天个页的的记录条数为十条,那第二个页
&&&&&&&&&&&&&&&& 那GrdFile.Items[11] 是指向第二个页的第一条记录。
&&&&&&&&&&&&&& 2:但是如果只写上GrdFile.Items[11]那就只返回对象 不会返回值&&&
&&&&&&&&&&&&&& 3:GrdFile.Items[i]中的i是不能够超出范围,如果超出的话就会
&&&&&&&&&&&&&&&&& 有这样的提示:索引超出范围。必须为非负值并小于集合大小。参数名: index
&&&&&&&&&&&&&&&&&& i是从零开始的。
&&&&&& 3:GrdFile.Items[i].Cless[j]
&&&&&&&&& 这里的Cless[]帮助里提的是行 其实通过我实践,Cless[j]指的是第j列
&&&&&&&&&& GrdFile.Items[i].Cless[j] 返回的是第几个对象 的第几列的值
&&&&&&&&& 这里应该注意的是 有的时候也并不是返回真正的值:比方 如果那项是时间
&&&&&&&&& 则返回的时间,如那项不实实在在的值 那返回的就不会是真正的值,像图象
&&&&&&&&& 的那返回不会返回不会是图象 那个也不可能返回啊&
&&&&&& 4: 现在对此做一个补充 开始对GrdFile.Items[i].Cless[j] 不是用一种正确的方式去理解
&&&&&&&&& 所以才会出现3那样的写出的理解
&&&&&&&&& 其实很简单:Item[i]是指第一个对象也可以只第几行
Clsess[j]则是第几行过来的第几个单元格
&&&&&&&&&&&&&&&&&&&&&
&& 68:怎么用定义一个对象为文本框
&&&&&& CheckBox CbxD
& //设置CbxDept为复选框 这里为声明一个对象为控件对象
& //这个以前我是不知道的 不过现在知道到了 其实也可以声明一个对像为控件对象 
&&&&&& CbxDept = (CheckBox)GrdFile.Items[nRow].FindControl("CbxSelect");
& //这里为GrdFile获得第几行对象,从控制面扳里搜索带指定id的服务器控件。
& //所以这里的id为CbxSelect
&&&&&&&&&&&&
&& 69:分析一个翻页命令
&&&&&& private void GrdFile_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
& GrdFile.CurrentPageIndex = e.NewPageI
& //GrdFile.CurrentPageIndex 获取或者设置当前页的搜索
& //而e.NewPageIndex就是选择页的搜索引
& //这是翻页的命令啊 以前对这个不是很懂 但今天这个就是翻页 把新的页附值给这个对象
& BindGrdFile();
&& 70:怎么样封装删除一条语句:
&&&&&&& public bool ExecSql(string strSql)
& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& sqlConnection = GetConnect();
&& SqlCommand Comm = new SqlCommand(strSql,sqlConnection);
&& Conn.Open();
&&& if(Comm.ExecuteNonQuery() &0)
&& finally
&&& Conn.Close();
&&&&&&&&& 调用语句:
&&&&&&&&& strSql = "delete from uploadfile where id in(" + strTableID + ")";
&& if (Das.ExecSql(strSql))
&&& Response.Write("&script&alert('删除成功!');&/script&");
&&& Clear();
&&& BindGrdFile();
&&& Response.Write("&script&alert('删除不成功,请稍后再试!');&/script&");
&&& if(TxtState.Text=="1")
&&&& PageInit();
&&& 71:对Comm.ExecuteNonQuery的理解它是在对连接数据库并返回受到影响的行。
&&&&&&& 打个比方如果这次对数据库的操作 对数据库表的几行进行操作就返回几行
&&&&&&& 上面例子对数据库进行操作就是利用这个属性达到检查数据库 操作有没有成功的问题
&&&&&&& 这是很值得学习的
&&&&&&&&&&&&&&
&&& 72:Response.Write("&script&alert('删除成功!')&/script&");的写法&
开发中的感受2.txt
1:关与几个平时很常见的取值问题:
& a:TxtUserName=DataGrid1.Items[nRow].Cells[1].T
&&& nRow为可以为设定的参数
 b:读取dataReader取值
SqlDataReader Reader = new SqlDataReader(strsql)
&&& while(Reader)
&&&&&& strTitle= Reader[0].ToString();
&&&&&& strContent=Reader[1].ToString();
&&&&&& strSex =Reader[2].ToString();
&&&&&& ...
&2:注意到一点在只有类型文件中,是不能够使用Response.Wiret()的命令的
&3:以前经常看到用Reponse.Write()写语句生成html我没有试过
但是觉得应该会比较好玩 所以特意抄了一例子下次有机会有用上
public void madhtm()
&Response.Write("&TR&");
&Response.Write("&TD heigth='150',align='left' width='155' Valign='top'&作者:"+strUserName);
&Response.Write("&br&发表时间"+strTitle);
&Response.Write("&/TD&");
&Response.Write("TD colSpane='3'&");
&Response.Write("&Table id='Table2' height='100' runan='server'&");
&Response.Write("&TR&");
&Response.Write("&TD align='right' width='80' vAlign='top'&"+ strContent);
&Response.Write("&/TD&");
&Response.Write("&/TR&");
&Response.Write("&/Table&");
&Response.Write("&/Font&");
&Response.Write("&/TD&");
&Response.Write("&/TR&");
& 注意这的strTitle,strContent为变量 可以从上面1中那样取值绑定到此
&4:以前用Label基本上是这样用Label1.Text
&& 今天发现还有一个功能很一意思:Label1.Font.UnderLine=True;
&& 使用该属性把控制件的文本更改为下划线形式
&5:开始在开发的过程中觉得Label,.txt传递值很好 可是在面板上确看的见 不过现在知道了
&& 可以把其属性隐藏起来就可以了
&& Lable.Visible=
&6:今天在看别人的文件代码的时候,突然有一个感受,做一个网站
&& 我没有可以把许多的变量什么的先放在一个类型文件中,还有许多需要处理的方法也必须
&&& 放在一个类型文件中,有些我们可以做接口 什么的 这样就必须有实现这个接口等等
&&& 这些都是很重要的
&7:在开发中平级别目录为:"FileGet.aspx?ID={0}"
&& 上一级别目录的写法为:"../FileGet.aspx?ID={0}"
&& 下一级别目录的写法为:"cs/FileGet.aspx?ID={0}"
&& 上一级在下一级别的写法为"../cs/FileGet.aspx?ID={0}"
&& 上二级目录写法为在下二级目录:"../../asax/Admin_Liuyan.ascx"
&8:经常在网站看到别人说一些编程方面的问题 有的是不知道所云
&& 这到底是什么原因:现在觉得应该是是一个过程问题吧
&& 就想几年前我现在自己能够写这么多代码简直觉得不可思议一样 因为那个时候
&& 很多都看不懂 甚至被同学笑说连1加1都编不出了
&& 现在通过自己这一段的锻炼 觉得最基本的东西应该没有什么大问题 不过还要加强
&& 现在应该是对.net核心技术 编译.net的内部机智
&& 我建议自己能够研究一下《asp.net基础教程》那本书&
&9:对写sql语句的再一次说明
&& int imgid = int.Parse(Request.QueryString["id"]);&
&& string sqlText = "SELECT filename,data,Contenttype FROM uploadfile where id=" +
&& 看这个语句的imgid它没有写在里面啊 不是说sql语句都要放在引号内吗
&&& 其实也不能够完全这样讲,因为你看imgid是一个数字 它没有必要放在把它当成字符串看待
&10:经常会用到搜索,但是觉得如果要搜索某一问题,想一个好的搜索关键字是至关重要的
&&& 如果要搜索某一问题:可以先想好几个关与着方面的关键字 然后再去搜索
&11:以前没有接触过ImageUrl 这个属性 这个属性在很多控件里 都有的以前也没有用
&&& 所以每一次见到也是 觉得熟悉而陌生 今天遇到一个从数据库里 从出图片怎么样显示出来
&&& 并且绑定控件,不知道怎么解决
&&& 然后找到一个例子终于知道怎么做了:
&&& 控件写法:
&&& ImageUrl='&%#"ReadImage.aspx?ImageID="+DataBinder.Eval(Container,"DataItem.id")%&'
&&& ReadImage.aspx 下面的cs:
&blog.cs.DataSql data = new blog.cs.DataSql();
&SqlConnection cn =data.GetConnect();
&SqlCommand cmd=new SqlCommand();
&cmd.CommandText="select data from uploadfile where id='"+this.Request["ImageID"]+"'";
&cmd.Connection=
&cn.Open();
&this.Response.ContentType="image/*";
&SqlDataReader dr=cmd.ExecuteReader();
&while(dr.Read())
&this.Response.BinaryWrite((byte[])dr["data"]);
&cn.Close();
&12:我买了一本书《asp.net高级编程》看了关于dll文件的编译问题& 可是觉得还有一些地方没有
&&&& 弄懂所以在网上搜索了下,可是让我觉得奇怪的是 很多地方 想无优网& 还有一些论坛里
&&&& 都看到和书上一模一样的文字 当然有的还加上了一点在后面 这样就成了其他的文章
&&&& 可见很多东西 并不是真正的发表者些出来的 当然也不能够说这是错误 能够借用别人的 东西
&&&& 未必不是一件好事 说这一段话的目的 是不要认为别人都很牛的 其实很多很多人都是引用了别人的
&13:这里要说的是DataGrid里的模板我觉得很有用
&&&& &asp:BoundColumn DataField="Pt_Id" HeaderText="Id"&
&&&&&& &HeaderStyle HorizontalAlign="Left" Width="5%"&&/HeaderStyle&
&&ItemStyle HorizontalAlign="Left"&&/ItemStyle&
&&&& &/asp:BoundColumn&
&& 注意这里的Width="5%" 这个很重要我觉得 他可以控制宽度,比方说时间字节我们要长一点
&& 我们就可以在时间那里的headerStyle上把width设为20% 而上面这个id宽度要求比较小所以
&& width设为5%
&14:文本输入框可以控制输入的字节数
&15:在C#里一种简单的添加参数的写法:
&&&& 请看例子:对添加一个参数的二种写法:
&&&& Number1:
&&&& command.Parameters.Add("@Img_Name", SqlDbType.VarChar, 50).Value = imgN
&&&& Number2:
&&&& SqlParameter param2= new SqlParameter("@Img_Name",SqlDbType.VarChar,50);
&&&& param2.Value=imgN
&&&& command.Parameters.Add(param2);
16:这个删除语句很有意思: strSql = "delete from Ph_Photo where Pt_Id in(" + strTableID + ")";
&& 注意它是用的in 我想意思应该是 Pt_Id='"+strTableId+"'
&& 但是这种用法第一次见 很有意思
17:sql语句不区分大小写
18:看这二个调用:blog.cs.DataSql Data = new blog.cs.DataSql();
&&&&&&&&&&&&&&&& DataSql Data = new DataSql();
&& 以前写都是用第一种写法:但是其实如果调用的类与被调用的类 是在一个文件下面就没有必要
&& 用第一种写法了,这只是一个小问题 却能够节省写代码的时间
19:在做系统的时候必须注意:做一件事情 或者说打到一个目的 有很多方法 这个时候我们就必须
&& 去选择那一种方法是最好的 最可靠的:当然这里考虑的因素很多 比如说走这一条路径程序运行
&& 速度,还有系统的稳定性 以及以后系统的维护等方面 这些都是必须考虑的
20:在写存储过程的时候 有几次都遇到了这样一个问题了 现在对这做一个总结:
&&& 有的时候运行存储过程语句出现 可以输入插入值 但是当我运行完语句的时候 就出现了
&&&& 这样的提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'P_PingLun
&&&& 结果是没有插入值,这是为什么呢,开始我看不懂:IDENTITY_INSERT 设置为 OFF
&&&& 后来发现是我向标识列中插入了值,这个列id 是主键 是不能够向里面插入值的
&&&& 是我sql语句写错,改了以后就没有事了
21:我们在写程序语句的时候 写等好是要我们算术里的两个等号 一个是附值号 但是
&&& 在sql语句中等号是一个等号 我还没有发现在里面有附值号
22: 这里有小技巧要说出来,我们在写程序的时候,往往出现括号多少的错误,
&&& 表现是在一个边括号上用红色标识出来,提示就这里多了或者少了一个括号,
&&& 那里这里到底是多了还是少了怎么看呢 这里有一个技巧:就是我们可以看旁边的
&&& 树型的节点线:如果标识括号的下面还有节点 但是没有边括号了,
&&& 肯定是这里少了一半括号,如果是多了一括号 则是这样提示的 标识的括号不在&
&&& 节点上 是多了 所以要把它删掉
23& blog.cs.DataSql conn = new blog.cs.DataSql();象上面这样的调用公共类的语句
&&& 之前我说过如果是在同一个文件夹下面,可以这样写:
&&& DataSql Conn = new DataSql()
&&& 其实我觉得第一种方法 从文件的移动方面来说有它绝对的优势 因为如果你调用这里类
&&& 在掉用的这个文件改变位置的时候 方法一这样还是有效的 方法二就不一定有效了
24: 以前说觉得数据库不是很重要 但是现在却不是这样认为的了,可以说现在读数据库的理解
&&& 是从实践中认识到的:我觉得对于一个有数据库(有后台)的程序来说 程序就是负责从
&&&& 只是将存人数据库里的信息进行加工处理:当然这个加工包括很广 包括各种知识 如:
&&& 算法,数据结构,程序语言,脚本语言& 还有基本的电脑知识等& 然后从数据库里取出
&&& 信息进行加工处理,这里也涉及到的加工数据所需要的知识,所以说这种输入输出
&&& 也不是很难的,当然这里也有几个较难一点 一是数据结构 还有一个是Xml,xml是
&&& .net的核心 它有跨平台的优势
&&& 这里重点要说数据结构& 它的维护涉及到知识很关 这里又是一门学问 数据更新
&&& 现在见到的网站的更新 就是把输入输出进行变换 而数据库没有变
&&& 这也可以说是换药没有换汤,当然这样做的好处 是你网站以前的信息还在 可是这个网站
&&& 却和以前不同了
25:以前忽视了一个问题:其实对于ubb字符的替换完全可以把它放在一个公共的模块中去完成
26:刚才把一个ubb字符替换放入模块中 可是访问不到啊 怎么会事情 明明调用了这个模块
&&& 后来才知道 原来是这个模块是定义成private其实应该定义成public了 就可以了
27:今天晚上一个问题花了我一个多小时没有解决 就是我想从前台显示的id调用后台的参数
&&& 再查找出评论数 再返回给前台的评论数数据源 可是遇到的问题是无论我怎么样
&&& 也不能够调用成功 因为从id调用的方法 传递参数到返回给前台的评论数据源的参数的方法
&&& 中间参数我传递不过 我用了一个Label控键作为中间变量也不可以,后来我终于
&&& 从迷茫中走出来了 其实在前台根本不要评论的数据源 只要把前台的id调用它后台的方法
&&& 再返回给评论数给id显示出来 这样我就可以把id当作评论数就可以了
28:其实我觉得有必要对各种变量的命名自己做一个总结 一个好的变量命令法则对个人编写代码
&& 是很用的:我现在对这个有模糊的认识和运用但是觉得还没有明确化 下次应该对此好好作一
&&& 个总结
29:blog.cs.Review good = new blog.cs.Review();&
&&& good.AddPn_Pinlun(Name.Text,HTML.FilterBadWords(HTML.HTMLEncode(HTML.HTMLEncode(TEXTAREA1.Value))),id);
&&& 这个例子是自己尝试写的:得出结论是方法可以嵌套
30:以前对于数据库里设计表的时候 向里面添加一行的时候 只能够是添加的选中行的上一行不是很理解
&& 想想怎么数据库设计的时候不添加它下面的一行,现在才知道 如果我要添加的首行
&& 还非得是添加点击的上一行才行
31:数据库里是不区分大小写的
32:对与SqlDataReader读取数据的认识
&& SqlDataReader是对于大多数有效的情况下读取数据的好的方式。你不能使用它来写入数据。
&& SqlDataReaders通常作为快速的只向前读的数据流。
&& 你能够以只向前的顺序方式从SqlDataReader对象中进行读取。
&& 只要你已经读取了某些数据,你必须保存它们,因为你将不能够返回并再一次读取它。
&& SqlDataReader的只向前读的设计使它很迅速。
&& 它并没有遍历数据或者将数据重新写回给数据源的负担。
&& 因此,如果你一次只需要读一组数据,并且希望最快速的方法,
&& SqlDataReader则是最好的选择。同样,如果一个单独调用所需要读取的数据量大于内存的存放能力,
&& SqlCommand对象cmd的ExecuteReader方法返回一个SqlDataReader实例。
&& 使用new关键字创建一个SqlDataReader并不做任何事情。前面的课程已经学到,
&& SqlCommand对象引用connection和SQL语句对于SqlDataReader读取数据是必需的
&& 前面已经解释了,SqlDataReader通过顺序数据流返回数据。为了读取这些数据,
&& 你必须从一个表中一行一行的取出数据。只要一行被读取,之前的数据就不再有效。
&& 为了再次读取那行,你应该创建一个新的SqlDataReader实例并且再次从数据流中读取它
&& 从SqlDataReader中读取返回的数据流的典型方法是通过while循环迭代没一行。下面的代码显示了如何完成:
&&&&&&& {&
&&&&&&&&&&&&&& // get the results of each column
&&&&&&&&&&&&&& string contact = (string)rdr["ContactName"];
&&&&&&&&&&&&&& string company = (string)rdr["CompanyName"];
&&&&&&&&&&&&&& string city&&& = (string)rdr["City"];&
&&&&&&&&&&&&&& // print out the results
&&&&&&&&&&&&&& Console.Write("{0,-25}", contact);
&&&&&&&&&&&&&& Console.Write("{0,-20}", city);
&&&&&&&&&&&&&& Console.Write("{0,-25}", company);
&&&&&&&&&&&&&& Console.WriteLine();
&&& 注意在上面代码中的while循环对SqlDataReader对象rdr调用的Read方法。
&&& Read方法的返回值为bool,并且只要有记录读取就返回真。
&&& 在数据流中所有的最后一条记录被读取了,Read方法就返回false。
&&&& 在前面的课程中,我们使用SqlDataReader的索引器,比如rdr[0],
&&& 提取行中的第一列。你能够使用诸如这样的数值索引器提取行中的列,
&&& 但是它并不具有很好的可读性。上面的例子使用了字符串索引器,
&&& 这里的字符串是从SQL查询语句中得到的列名(表的列名如果你使用一个星号,
&&& *.字符串下标具有更好的可读性,使得代码能够更好的维护。
&&&& 一定要记住关闭SqlDataReader,就像关闭SqlConnection一样。
&&&& 将数据存取代码用try语句块包围起来,并把关闭操作放到finally语句块中,就像这样:
&&&&&&& try
&&&&&&&&&&&&&& // data access code
&&&&&&& finally
&&&&&&&&&&&&&& // 3. close the reader
&&&&&&&&&&&&&& if (rdr != null)
&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&& rdr.Close();
&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&& // close the connection too
&&&&&&& }&&&
&&&& SqlDataReader的数据流形式应该是一个好的选择
&&&& using S
&&& using System.D&
&&& using System.Data.SqlC
&&& namespace Lesson04
&&&&&&& class ReaderDemo
&&&&&&& {&
&&&&&&&&&&&&&& static void Main()
&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&& ReaderDemo rd = new ReaderDemo();
&&&&&&&&&&&&&&&&&&&&&& rd.SimpleRead();
&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&& public void SimpleRead()
&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&& // declare the SqlDataReader, which is used in
&&&&&&&&&&&&&&&&&&&&&& // both the try block and the finally block
&&&&&&&&&&&&&&&&&&&&&& SqlDataReader rdr =&
&&&&&&&&&&&&&&&&&&&&&& // create a connection object
&&&&&&&&&&&&&&&&&&&&&& SqlConnection conn = new SqlConnection(
&&&&&&&&&&&&&&&&&&&&&&&& "Data Source=(local);Initial Catalog=NIntegrated Security=SSPI");&&
&&&&&&&&&&&&&&&&&&&&&& // create a command object
&&&&&&&&&&&&&&&&&&&&&& SqlCommand cmd& = new SqlCommand(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& "select * from Customers", conn);&
&&&&&&&&&&&&&&&&&&&&&& try
&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // open the connection
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& conn.Open();&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 1.& get an instance of the SqlDataReader
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rdr = cmd.ExecuteReader();&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // print a set of column headers
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.WriteLine(&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& "Contact Name&&&&&&&&&&&& City&&&&&&&&&&&&&&& Company Name");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.WriteLine(
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& "------------&&&&&&&&&&&& ------------&&&&&&& ------------");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 2.& print necessary columns of each record
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& while (rdr.Read())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // get the results of each column
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& string contact = (string)rdr["ContactName"];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& string company = (string)rdr["CompanyName"];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& string city&&& = (string)rdr["City"];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // print out the results
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.Write("{0,-25}", contact);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.Write("{0,-20}", city);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.Write("{0,-25}", company);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Console.WriteLine();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&& finally
&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 3. close the reader
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (rdr != null)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rdr.Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // close the connection
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (conn != null)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& conn.Close();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&& }&&&&&
&&&&&&&&&&&&&& }
&&& SqlDataReader对象允许你以一种快速的只向前的方式读取数据。
&&& 你从数据流中读取每一行来读取数据。调用SqlDataReader的Close方法保证资源泄漏不会发生。
&&& 我觉得总的说:1:Reader.Reader()只返回true与flash
&&&&&&&&&&&&&&&&& 2: Reader[n].tostring()返回的是第1列第n行的记录
&&&&&&&&&&&&&&&&& 3:Reader记得关闭,重要性和sqlConnection一样;
&&&&&&&&&&&&&&&&& 4:一个sqlDataReader对象一个记录只能够读取一次
&&&&&&&&&&&&&&&&&&&& 如果要再次读取则要重新实例化一个对象
&&&&&&&&&&&&&&&&& 5:最好使用try{}fially()语句对其中进行控制
6:如果我想要读取指定表中的字节:的写法为
string contact = (string)rdr["ContactName"];&
&&&&&&&&&&&&&&&&&&&&& Console.Writeline(rdr[“CustomerID”]+rdr[“CompanyName”]);
7: Reader是以一种流的形式读取
&&&&&&&&&&&&&&&&& 8:用Reader.GetByte();可以控制读取的字节数;
&&&&&&&&&&&&&&&&& 9: if(ReadEnd.Read())
&&& Label1.Text=ReadEnd[0].ToString();
&&& Label2.Text=ReadEnd[1].ToString();
&&&&&&&&&&&&&&&&&&&&&&&& '''
&&&&&&&&&&&&&&&&&&& 以前对这个有一个误解:其实这不是去读取返回第一行的的第一个字节记录
&&&&&&&&&&&&&&&&&&& 第二个字节记录 知道第n行字节记录 注意这都是在一行的
&&&&&&&&&&&&&&&& 10:用SqlDataReader读取的记录中如何判断列的数据类型
&&&&&&&&&&&&&&&&&&& Reader.Item("ColumnName").GetType().Name
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&& 11:在实践中我发现不能够用SqlDataReader去读取列的记录,只能够用它来读取行的记录
&&&&&&&&&&&&&&&&&&&& 就是返回的行 如果返回多行 它读取最先的那一行 当然这是我实践中的认识& 我想
&&&&&&&&&&&&&&&&&&&& 是不是这样的就我以后去验证了
&&&&&&&&&&&&&&
33:以前对与方法ToString()的认识觉只可以一变量后面直接加上此方法例如:a.ToString()
&& 现在才知道不是这样的其实也可以这样的,(int)ReadEnd["A_Key"]).ToString();
&& 但是如果是这样写就不可以了(int)ReadEnd["A_Key"].ToString();
&& 也就是说我们在ToString()方法前面可以直接加一个用括号的方法,
34:javaScript语言区分大小写的
35:在写存储过程语句的时候 换行的时候 可以直接写 就像在一行里写一样 不像在程序中写语句这样麻烦
36:有的时候你定义一个变量 在用另一个地方去用它可是不知道 是不是跟一定义的变量写的一样& 有没有
&&& 写错 着个时候你可以在你写的变量上面 停留鼠标 如果这个变量有的话 就会有提示这个变量的路径
37:try{}catch{}还真的厉害 它能够把在在try{}语句调用地方的语句的 的存在的错误报告出来
38:开始以为在同一个类中的一个公共的变量 如果在一个方法的定义一个值在另一个方法是不可以得到这个值
&&& 其实不然:
&&& 比方:
&&&&&&&&&&&& private void Check()
&&&&&&&&&&& { a=1;
&&&&&&&&&&& }
&&&&&&&&&& private void Button1_Click(object sender, System.EventArgs e)
& Check();
& good(a);
&&&&&&&&&&& }
&&& 这个例子调用方法good()可以把a=1的值传递进去
开发中的感受3.txt
1:一前对写连接存储过程语句不在行现在看此例子:
& public int GetPn_PinLun(int Pt_id)
& DataSql Data = new DataSql();
& SqlConnection Conn = Data.GetConnect();
& SqlCommand Comm = new SqlCommand("GetPn_PinLunNumber",Conn);
& Comm.CommandType=CommandType.StoredP
& SqlParameter Parameterid = new SqlParameter("@Id",SqlDbType.Int);
& Parameterid.Value=Pt_
& Comm.Parameters.Add(Parameterid);
&Conn.Open();
&int result = (int)Comm.ExecuteScalar();
& 如果我是要返回到调用此方法的类的话 我们就要在public中定义为返回类型的数据类型
& 此例子中定义为int 则在返回的resule也为int类型 对于传进的参数 想pt_id 也不一定
& 要为年int 型即不一定和和public定义的类型一样
& 如果没有返回则用Void
& 想写这种连接存储过程的语句 还有一个要值得注意的地方就是 注意数据库连接类的对象
& 比方Comm对象下面的方法返回的并一定就是我们想要得到的类型 这样时候 我们就要把
& 类型进行转换,比如上面的这个例子int result =(int)Comm.ExecuteScalar();
& 就成功把ExecuteScalar()的类型进行了转换
& 此例子还有一个值得学习地方就是我开始不知道要写连接存储过程 返回查找的数目
& 语句因为觉得类型转换不过来不过现在我觉得知道了。
2:对存储过程语句初步定义:
&& 1:要表里插进语句的用Insert_Table
&& 2: 对表进行更新的语句用:TableUpdate+(查的意义词)_(字节);
&& 3: 对重表里差找记录的用:TableSelect+(查的意义词)_(字节;
&& 4: 对删除表里记录的用: Tabledelet+(查的意义词)_(字节)
3:继续说一下括号的事情 对上次说这个的一个补充 在编程过程中如果发现有括号 打上红线还有
& 一种可能就是程序的标点有有问题 少标点 当然如果是多一个标点 也会标红线 不过是标在
&& 多的那个标点上
4:经常在调试的时候 看这样的提示,找不到类型或者命名空间(出错对像) 是否缺少using
&& 指令或者程序集引用 出现这种情况有二种可能 一种就是缺少引用 一种就是对像写错了。
5:& ADO.NET连接池超时
&& 今天在运行程序的时候 有的时候运行速度很慢&& 我估计应该不是我做的程序的问题而是我电脑的问题
&& 由于在运行的时候 久久不出一个页面子& 过了大概二十秒 就出现“
&& 超时时间已到。在从池中获取连接之前超时时间已过。
&& 出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。”
&& 现在对这个问题终于知道了:主要是打开的连接没有关闭导致的 所以解决这个我问题
&& 有二个办法:一:记得要关闭所以打开的连接
&&&&&&&&&&&&&& 二:题的原因是与数据库的连接没有显示关闭,而等系统自动回收是要时间的.
&&&&&&&&&&&&&&&&&& 解决的方法是改变连接池的大小.在连接字符串的后面加上以下代码:
&&&&&&&&&&&&&&&&&& Enlist=Pooling=Max Pool Size=300;Min Pool Size=0;
&&&&&&&&&&&&&&&&&& Connection Lifetime=300;user id=packet size=1000
&&&&&&&&&&&&&&&&&& 其实方法一是治本的
&&&&&&&&&&&&&&&&&& 对于方法二我还没有用过
&&&&&&&&&&&&&& 三:此问题还可以延伸到一个SqlDataReader 对象在打开后面也要记得关闭
&&&&&&&&&&&&&&&&&& SqlDataReader对象一般以为很多时候要用Reader.Read()方法读取
所以一般边用这样的过程控制语句:
try{ if(Reader.Read()){//读取数据} }finally{if(Reader.Read!=null)
&&&&&&&&&&&&&&&&&&& {Reader.Close()}}
6:看一个储藏过程的例子:
&& ALTER PROCEDURE GetClassName
&&& (& @Id int,
&&&&&& @ClassName varchar(50) output
&&& Select @ClassName=F_Name from F_Class where F_Id =@I&
&&& RETURN
&& public string GetClass(int Id)
&&&&&&& DataSql Data = new DataSql();
&&&&&&& SqlConnection Conn = Data.GetConnect();
&&&&&&& SqlCommand Comm = new SqlCommand("GetClassName",Conn);
&Comm.CommandType=CommandType.StoredP
&&&&&&& Comm.Parameters.Add("@Id",SqlDbType.Int).Value=Id;
&SqlParameter Parameterclassname = new SqlParameter("@ClassName",SqlDbType.VarChar,50);
&&&&&&& Parameterclassname.Direction=ParameterDirection.O
&Comm.Parameters.Add(Parameterclassname);&
&&&&&&& Conn.Open();
&Comm.ExecuteNonQuery();
&Conn.Close();
&string F_ClassName = (string)(Parameterclassname.Value);
&return F_ClassN
&& 这是一个从利用存储过程向数据库里进行有条件查询的例子,这个例子进行了语句的输进与输出
&& 这个输出不是返回一个符合条件的字节 以前遇到这个问题不知道怎么解决
&& 现在对这个作一总结:利用Parameterclassname.Direction=ParameterDirection.O
&& 得到一个输出型参数 @ClassName 并通过Comm.Parameters.Add(Parameterclassname);
&& 加载到Comm对象通过Comm.ExecuteNonQuery();执行 从而把变量 传递给储藏过程GetClassName
&& 中的@ClassName 接着通过@ClassName=F_Name语句@ClassName得到值
&& 这个时候我们通过定义F_ClassName接受收到返回来的值,这里我们把Parameterclassname.Value
&& 通过(string)(Parameterclassname.Value);此语句把它转换成字符串,
&& 最后我们把得到结果F_ClassName 通过return 返回,值得注意的是 因为返回的是字符串&
&& 所以在定义方法GetClass 的类型的时候 我们定义成string 型的
7:引用是不去分发小写的 但是引用上带的问件名是区分大小写的
8:&%@ OutputCache Duration="200" VaryByParam="none"%&
&& 以前看到过这个引用 不知道干什么啊 现在知道了是页面输出缓冲,这里东西缓冲方面很多
&& 以后会对这个做一个分析吧& 今天用了一下 感觉果然很爽
9: 开发系统有些能够在客户端完成的工作就不要提交给服务器去处理 所以对与控件不要
&& 在服务器端去完成的就不要做成服务器控件
10:对与try{} catch() 语句以前总在catch后面加上System.(System.Exception EXE)
&&& 结果如果不通过Response.Write(EXE.Message) 倒出来就会有运行提示
&&& 在catch 下面有蓝线标识 接着有这样提示 声明了EXE 但从未使用过
&&& 不过现在发现其实可以这样写:try{} cath{} 这样我们没有声明Exception 就不存使用
&&& 不使用EXE的事了
11:注意在数据库访问的时候 如果我们想得到每一个字节下对象的个数学 Count(*)
&&& 没有的话返回的是0 但是如果我们输入一条记录作为查找另一条记录的条件的
&&& 话如果查找没有成功的话& 返回的就会出错
12: 我觉得数据库里的表一但建设好,尽量不要去修改
&&& 但是如果要修改根据经验 如果要删除里面的字节 如果这个字节有内容 最好先把内容去掉
&&& 还有要除掉一个字节一般带来的麻烦一般比向表里加一个字节多的多
13:对与掉用公共模块的话 最好把实例化对象放在开头即定义这个类公用的对象
&&& 以便其他方法调用,这样做一是有利于结构化编程 另外一个就是省去如果多
&&& 个方法调用的 重复性实例的麻烦
14:我觉得一般写代码应该注意格式 这也上老掉牙的话题了 不过觉得重要所以再说一下
&&& 这是一种良好编程风格的体现 所以我们在编程嗲们过程中一方面要注意结构化编程
&&& 另一方面则要在写完程序后对整个页面进行排版 删掉多余的空格 同时
&&& 注意方法的放的位置
&&& a:像一般控件触发事件一般放在 web窗体设计器代码的下面
&&&&&& 其他的放在上面
&&& b:一般处理事件接近的方法放在一起
&&& c:方法与方法只之间为一个空格
&&& d: 方法括号与里面代码之间一头为一个空格
&&& e: 方法定义的变量前后一个空格
&&& f: 方法里作用相同的代码放在一起成一块 块一块之间为一个空格
15:我决改代码比写代码有的时候更头疼
16:方法private void Page_Load(object sender, System.EventArgs e){}
&& 就相当C#编程里的Main()方法 是程序执行的入口。
17:在数据库里定义字节的默认值的时候 记得要用括号把时间括起来(1)
18:调试系统的时候 选择的启动页加载容易一点的 在进入页面的时候如果有多条路径
&& 进入则选择容易加载路径 其次可以把经常调试的页 放如缓存
19:在实践中我发现写sql语句的时候 只要用对了 并且对应的数据对了 顺序没有错
&&& 同一地方的字节的顺序是没有多大关系的
&&&& 例如:
&&&& insert into P_PingLun(P_Name,P_Email)values(@P_name,@P_email)
&&&& insert into P_PingLun(P_Email,P_Name)values(@P_email,@P_name)
&&& 是一样的
20& 以前对web控件与html控件的认识不是很清楚
&&& web一般是运行的web上的也就是服务器上的
&&& html一般指的是html页码 所以它一般是运行在客户端的
&&& 如果要把html页运行到web上就要把变成在服务器控件 一般经常看到有的时候
&&& 点多次点击html控件的时候就会有这样的提示
&&& 其次还要注意一点就上一般我们要在cs里对服务器html控件进行编程的时候
&&& 这个时候 就要把它变化成服务器控件
21:我觉得如果有必要的话 可以把常用的控件放在一起做成一个模块
22: 经常看到调试中有这样的语句未将对象引用到实例 }

我要回帖

更多关于 我不太懂 偏渴望你懂 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信