月度归档: 2010 年 10 月
Ajax开发
1,VS2008默认带有AJAX Extensions组件
2,局部刷新:UpdatePanel
- 页面引入ScriptManager,设置EnablePartialRendering=”true”
- 将需局部刷新的代码块用UpdatePanel包裹
- 若想得到点击按纽触发局部刷新,设置UpdatePanel的Triggers
3,进度条:UpdateProgress: 它将显示页面上所有的UpdatePanel控件更新的进度信息。,
可用AssoicateUpdatePanelID指定关联的UpdatePanel
- 页面放置UpdatePanel
- 在UpdatePanel放置UpdateProgerss
数字证书
1,网页传输数据是明文形式,实现https形式可以保证其安全,一种方式就是数字证书加密。
2,SSL位于于HTTP协议层与TCP协议层之间,用于建立用户与服务器之间的加密通信,它是依靠数字证书实现的。
3,数字证书实现:
* 为服务器安装证书服务,在系统安装盘。
* 配置网站:IIS-网站属性-目录安全性-安全通信:服务器证书,让系统自动生成一个。
* 配置网站:IIS-网站属性-目录安全性-安全通信:编辑,指定安全方式
* 利用https://网站域名访问
色彩理论
本地文件:enjoytools/ColorPicker/images/PrimaryColors.swf
mstsc远程桌面与远程协助
远程桌面:mstsc /v:192.168.16.101?? 新开桌面
远程协助:mstsc /v:192.168.16.101 /console 共用桌面
检测sql语句影响的行–@@ROWCOUNT
@@ROWCOUNT 返回受上一语句影响的行数,如select取出的行数,(可用此判断查询是否有结果),update更新的行数。
注:@@RowCount 是全局变量,它是基于session的,每个会话有自己的全局变量,在任一时间点下@@RowCount是安全的。 也就是说它永远是返回该session前一条sql所影响的行数.
程序利用using System.Management, 开发环境测试良好,更新代码上去报找不到此引用的错误
?在正式环境的web.config中assemblies结点下加入:???
<add assembly=”System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A”/> 即可。
即:引用的系统命名空间在web.config的assemblies结点下存储。
C#语法拾遗
C#语法拾遗
1,using;
* using 命名空间名字;
* using 别名 = 包括详细命名空间信息的具体类型,以区别两个不同命名空间有相同的类名。
* using定义范围:即时释放资源,在范围结束时即时释放资源,
* 如: using (StreamWriter w = File.AppendText(“c:\\temp.txt”))
{
Log(context, w);
w.Close();
}
2,@符号的使用
* 将转义符当成一般字符使用:string s = @”c:\a.txt”;
* 忽略换行:string s =string s = @”sdf
sdf
sfsdf”;
3,预处理命令
* #warning 和#error : 若编译器遇到,则产生警告或错误信息,以提示开发者,而#error会直接退出编译
* 如:#warning : 测试使用,正式发布时请去掉下句代码
* #region description #endregion 将一段代码标记为一个指定名称的代码块,可直接折叠,便于阅读
4,对于引用类型,==类似于比较文件夹的路径是否相同,而equals()比较的是文件夹中的内容是否一样。注:对于string,==比较的是值。
原理:==比较的是栈,值变量存储在栈中,而引用类型地址也是存储在栈中。而equals比较的是堆,而引用类型的值就存在于堆中。
引用类型对应有多个字段,故地址存放于栈中,多个字段存放于堆中。
5,const是编译时常数,须在最开始赋初值,默认是static, 而readonly是运行是常数,默认不是static.
* const是编译时常数,故不能修饰引用类型,因为引用类型的构造要在运行时完成。不过string与null除外。
* 注:数组也是引用类型,同样不可用const修饰。
* const默认是static,故不可在非静态方法中修饰局部变量。
6,sealed:不可继承,断子绝孙。virtual与override进行覆盖。
7,变量与属性的区别:属性是对字段的一种封装,可以控制读写,体现了面向对象的封装性。
8,class与struct的区别:class是引用类型,内存分配于堆上,而struct是引用类型,内存分配于线程的栈上。
类似百度文库效果实现
实现的效果如下:
步骤:
1,利用FileUpload控件做文件上传
2,转换:安装FlashPaper2.2,
在程序中调用cmd命令完成转换:
FlashPrinter.exe “test.doc” -o “test4.swf”
注:iis及应用程序池需开权限以执行FlashPrinter
如下:
try
{
Process p = new Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.Start();
string strOutput = null;
string outputPath = Server.MapPath("~//test5.swf");
string s = @"FlashPrinter.exe " + "\"" + FilePath + "\" -o \"" + outputPath + "\"";
p.StandardInput.WriteLine(s);
p.StandardInput.WriteLine("exit");
strOutput = p.StandardOutput.ReadToEnd();
Console.WriteLine(strOutput);
p.WaitForExit();
p.Close();
lblMessage.Text = "success";
embed1.Attributes.Add("src", outputPath);
}
catch (Exception ex)
{
lblMessage.Text = ex.ToString();
}
注:执行完之后可关掉进程
///?<summary>
///?根据进程名称来关闭进程
///?</summary>
///?<param?name="processName"></param>
private?static?void?KillPrecess(string?processName)
{
foreach?(Process?p?in?Process.GetProcesses())
{
if?(p.ProcessName?==?processName)
{
p.Kill();
}
}?
}
3,在线播放:若文档较小,一般的flash播放器即可。若文件很大,一次加载所有再显示文件的播放器显然会拖慢速度,这时需要了解的是一个开源的flexpaper播放器,它可以播放一帧一页的flash;要像百度文库、豆丁一样修改flexpaper,让它支持一次仅读取指定页数的flash;如果文档安全级别较高,不允许下载查看,则需要给flexpaper加上加密解密算法;如果需要登录用户才能查看,则要让flexpaper有登录UI。
实体类与数据库表的对应关系配置优越性
实体类与数据库表对应关系通过XML配置起来,那么当数据库表字段改变时,只需将配置文件将稍微的调整即可,而在类文件中因为使用的是实体类,没有直接与数据库表关系,所以数据库的改动将影响很小。
即:间接使用对象,使用对象与原来对象通过配置文件进行配置,一如DAO与BLL,也是注入配置而成。
文件上传:asp:FileUpload
1,页面放置控件FileUpload
2,代码:
string FileName = fileUpload1.PostedFile.FileName;
FileName = FileName.Substring(FileName.LastIndexOf("\\") + 1);// 取出文件名的路径(不包括文件的名称)
string upload_file = Server.MapPath("./upload/") + FileName;//取出服务器虚拟路径,存储上传文件
fileUpload1.PostedFile.SaveAs(upload_file);//上传文件
常用属性:
(1)FileUpload1.HasFile用来检查 FileUpload是否有指定文件。
(2)HttpContext.Current.Request.MapPath("~/") 则是获取网站所在的磁盘绝对路径的,如D:\Inetpub\ServerControls\路径,之所以要这么做,是因为FileUpload控件必须指定“绝对路径”,而非相对路径,同时绝对路径也必须有写入权限。
(3)FileUpload1.SaveAs()则是将上传文件存储在磁盘的方法。
(4)FileUpload1.FileName用于获取上传文件名称。
(5)FileUpload1.PostedFile.ContentLength 用于设置或获取上传文件大小,以Byte为单位。
(6)FileUpload1.PostedFile.ContentType 用于设置或获取上传文件的类型
google首次收录时间查询
1.在google的搜索框里输入你的网站收录查询命令 site:www.enjoyasp.net然后点击搜索结果的页面最上端点击“打开百宝箱”,页面左边就会显示一个列表,在这里,你可以选择一天内,一周内和规定日期等等。
2,在结果页面的地址栏最后加上 &as_qdr=y9,搜索结果前面将会显示网站首次收录的时间。
调用cmd执行命令
注意:对于命令行,若路径中带有空格时,如D:\My Documents\a.txt时,将找不到此路径,可采用以下两种方法:
1,加引号如:"D:\My Documents\a.txt"
2, 变缩写:采用8个字符缩写,即写头六个字母(略去空白),另加波浪号和1 改成:D:\MyDocu~1
try
{
Process p = new Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.Start();
string strOutput = null;
string s = @"F:\DownLoad\wenku\FlashPaper2.2\FlashPaper2.2\FlashPrinter.exe " + "\"" + Server.MapPath("~//test.doc") + "\" -o \"" + Server.MapPath("~//test2.swf") + "\"";
p.StandardInput.WriteLine(s);
p.StandardInput.WriteLine("exit");
strOutput = p.StandardOutput.ReadToEnd();
Console.WriteLine(strOutput);
p.WaitForExit();
p.Close();
lblMessage.Text = "success";
}
catch (Exception ex)
{
lblMessage.Text = ex.ToString();
}
谷歌百度搜索
搜索多个关键字 以空格分开
不包含某个关键字 加减号: -排除
filetype:pdf 马克思 或者:file.baidu.com
1,搜索内容: 内容
2,搜索指定网站内容: enjoyasp site:www.nxgao.com
3,搜索链接:inurl:wp-admin
4,搜索指定网站链接 inurl:wp-admin site:wordpress.org
5,搜索网页内容 intext:enjoyasp.net
6,搜索关键字 intitle:enjoyasp.net
如:搜索外面引用本站的页面数: intext:enjoyasp.net -inurl:enjoyasp.net
查询后台登录界面:intitle:后台登陆
实体类得不到外键的信息
Set<UserInfo> users = dept.getUserInfos();
得不到当前部门下所有的员工信息,原因是:dept的产生是来自页面,即没有通过数据库产生,故不会有UserInfos信息,通过
deptInfo = deptInfo_manager.getDeptInfo( deptInfo.getId() ); 解决。
即:实体类要想得到数据库数据,那么别忘记一定要让此实体类与数据库连接!!!
Hibernate主键生成方式
?以在*.hbm.xml中指定方式为准,即使在程序中设置了主键值,在插入更新时还是采用的是配置文件中指定的主键的生成的方式,
除非主键生成方式为assigned,由程序生成,此时在程序中设置主键才有效!
inverse cascade
<set name=”userPowers” inverse=”true”>
??? <key>
??????? <column name=”cid” />
??? </key>
??? <one-to-many />
</set>
inverse指定由谁控制,inverse = false,由自己控制关系。即当自己更新时,自动更新对方,而对方更新时,就不会自动更新自己。
cascade指定更新的权限,若不设置,在inverse = false时,已方任何改动都会反映到对方,若想进一步控制,可用cascade细分
cascade能设置的值有
all??????????????????????? 相当save-update加上delete
all-delete-orphan?? 相当all,并且会删除去父类失去关联的子类比如说Article.CommentList.RemoveAt(0),就会删除第一个子类
none??????????????????? 父类的操作不会关联到子类
save-update???????? 添加和更新进行级联操作
delete????????????????? 删除父类时,删除子类
delete-orphan?????? 删除父类时,删除父类没有关系的子类
<one-to-many>中,建议inverse=”true”,由“many”方来进行关联关系的维护 ,若设置one方为主方,则在删除时会自动删除子方,会删除大量数据。
<many-to-many>中,只设置其中一方inverse=”false”,或双方都不设置
参考实体类:person, son
one方:一个person对应多个son,son存在person的set中
many:一个son对应一个father
若双方都不设置inverse,都是受方
那么:?? Son为tom, Father为Davin,现在tom想改Father为Kax
son.setFather( Kax );
但:person.getSons().get( tom );仍会返回,指示Davin仍拥有tom,出现错误。
这里的关系指的是:one中一个与Set的关系???? 而many中一个与一个的关系, 将关系分成两部分,要指定一方来维护这种关系才可,否则须要手动编码来维护这种关系。
DAO方法
insertUser( User user ) C
getUser( String userId ) R
getAllUsers()
findUsersByProperty( String propertyName, Object propertyValue )
updateUser( User user ) U
deleteUser( user user ) D
更换数据库名称
要注意:除了在dataSource指定URL中更改的数据库名称外,还要相应修改 *.hbm.xml 的catalog指定的数据库名称
注: catalog作用: 为表名指定归属。
即:form myDB.news 当catalog=”myDB”时
可将catalog删除掉,此时默认的从从url指定的数据库名查找: from news ( 默认数据库 )
可看出:当一个项目仅用到一个数据库时删除掉catalog即可。
数据库字段命名
利用Hibernate时,它本身采用的是驼峰风格,若在表中指定is_index字段名,在自动生成实体类时,会将名称转成isIndex,造成数据库与实体类字段名称不一致,故为了统一,最好在数据库字段命名时采用驼峰风格