用 Directory.GetFiles 获取目录中所有文件,返回的是一个数组,里面存放的是所有文件的名称
这个数组中文件的顺序和打开目录时看到的所有文件显示的顺序不一样。
猜想 Directory.GetFiles 返回的结果是没有排序的,我们打开目录时看到的文件列表是有排序的,默认按名称排序的。
所有解决的放法,是对返回结果的数组进行排序。
string[] array = Directory.GetFiles(path);
Array.Sort(array); // 这样就进行了排序
用Webbrowser控件加载网页时,通常会用DocumentCompleted事件来指示网页加载完毕。但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕。要通过WebBrowserNavigatedEventArgs来判断。
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url != webBrowser1.Document.Url) return;
// 当 e.Url == webBrowser1.Document.Url 我们要的网页加载完毕
// 加载完毕
// ...
}
DataTable dt = dataTable.Clone();
dt.Rows.Clear();
DataRow[] rows = dataTable.Select(String.Empty, "ArticleID Desc");
foreach (DataRow row in rows)
{
dt.ImportRow(row); //数据导入新的DataTable中
}
<script language="JavaScript">
<!--
var TextAreaTab =
{
Register : function(obj)
{
// 绑定事件
obj.onclick = new Function('TextAreaTab.CreateInsertPosition(this)');
obj.onselect = new Function('TextAreaTab.CreateInsertPosition(this)');
obj.onkeyup = new Function('TextAreaTab.CreateInsertPosition(this)');
obj.onkeydown = new Function('TextAreaTab.InsertTab(this)');
},
// 这个只对ie有用
// 创建光标所在位置的对象,就是要插入的位置。
// 其实就是光标选中的对象,对它进行操作就可以了。
CreateInsertPosition : function(obj)
{
if (obj.createTextRange) // IE
{
obj.InsertPosition = document.selection.createRange().duplicate(); // 光标选中的对象
}
},
InsertTab : function(obj)
{
var evt = this.GetEvent(); // 返回 event 对象
if (evt.keyCode == 9) // 按下了Tab键
{
if (obj.createTextRange && obj.InsertPosition) // IE
{
// 赋予对象内容
obj.InsertPosition.text = '\t';
evt.returnValue = false;
}
else if (window.getSelection) // FF
{
var scrollTop = obj.scrollTop; // 滚动的位置
var start = obj.selectionStart; // 当前光标所在位置
var pre = obj.value.substr(0, obj.selectionStart); // 光标之前的内容
var next = obj.value.substr(obj.selectionEnd); // 光标之后的内容
obj.value = pre + '\t' + next;
evt.preventDefault();
// 设置光标在插入点之后的位置
obj.selectionStart = start + 1;
obj.selectionEnd = start + 1;
obj.scrollTop = scrollTop;
}
}
},
// 返回 event 对象
GetEvent : function()
{
if(document.all) // IE
{
return window.event;
}
func = this.GetEvent.caller;
while(func != null)
{
var arg0 = func.arguments[0];
if(arg0)
{
if((arg0.constructor == Event || arg0.constructor == MouseEvent)
||(typeof(arg0) == "object" && arg0.preventDefault && arg0.stopPropagation))
{
return arg0;
}
}
func = func.caller;
}
return null;
}
}
//-->
</script>
<textarea id="TextArea" rows="10" cols="50"></textarea>
<script language="JavaScript">
<!--
var textarea = document.getElementById('TextArea');
TextAreaTab.Register(textarea); // 注册一下对象,就可以让这个对象现实Tab功能
//-->
</script>
经常在基类的构造函数中获取用户的信息,比如Cookie、Session等,但Session在构造时却还不存在。
不过在OnInit时就可读取Session值了。
public partial class BasePage : System.Web.UI.Page
{
public BasePage()
{
// 这里Session对象还未创建
if (System.Web.HttpContext.Current.Session == null)
{
System.Web.HttpContext.Current.Response.Write("Session Is Null");
}
else
{
System.Web.HttpContext.Current.Response.Write("Session Is Exist");
}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// 这里就可以访问Session对象了
if (System.Web.HttpContext.Current.Session == null)
{
System.Web.HttpContext.Current.Response.Write("Session Is Null");
}
else
{
System.Web.HttpContext.Current.Response.Write("Session Is Exist");
}
}
}
1.执行 Dump Transaction 数据库名称 With No_Log
2.打开企业管理器(SQL2005) - 右键数据库 - 任务 - 收缩 - 数据库
如何不使用企业管理器删除日志
Dump Transaction Test With No_Log
DBCC ShrinkFile('Test_log', 1)
注意:
For example, a database with a log file of 1 GB can have the log file shrunk to only 128 MB.
如果日志很大,要收缩几次,才能收缩成最小。
<SCRIPT LANGUAGE="JavaScript">
<!--
// Unicode 中汉字编码范围:4E00 - 9FA5
var startNum = HexToInt('4E00'); // 开始
var endNum = HexToInt('9FA5'); // 结束
var text = '';
var cols = 16; // 一行十六个
for (var i = startNum; i < endNum + 1; i++)
{
if (cols == 0)
{
cols = 16;
text += '<br/>';
}
text += String.fromCharCode(i);
cols--;
}
document.write('<div style="font-size: 50px;">');
document.write(text);
document.write('</div>');
// 十六进制转十进制
function HexToInt(s)
{
return parseInt(s,16);
}
// 十进制转十六进制
function IntToHex(s)
{
return s.toString(16);
}
//-->
</SCRIPT>
PR是英文Pagerank 的缩写形式,Pagerank取自Google的创始人LarryPage,它是Google排名运算法则(排名公式)的一部分,Pagerank是Google对网页重要性的评估,是Google用来衡量一个网站的好坏的唯一标准。PR值的级别从1到10级,10级为满分。PR值越高说明该网页越受欢迎。那么PR值都受那些因素影响呢?
一、提高网站外部链接的质量和数量
在计算网站排名时,Pagerank会将网站的外部链接数考虑进去。
PR分值的计算公式: PR(A)=(1-D) + D*(PR(t1)/C(t1))
D表示阻尼因数一般是0.85。
PR(t1)表示网站的PR值
C(t1)表示网站对外的链接数
假设一个PR值为4的网站,对外的链接数为10个,则计算公式如下:
PR(A) = (1-D) + D*(PR(t1)/C(t1))
PR(A) = (1-0.85) + 0.85*(4/10)
PR(A) = 0.15 + 0.85*0.4
PR(A) = 0.15 + 0.34
PR(A) = 0.49
这样每一个链接的网站就得到了0.49的PR分值了。如果一个网站外部链接的页面PR值是零,那么就可以得0.15的PR值,要是这个页面没被Google收入或没有RP值那就不计算了。最好是找那些PR值高且外部链接数又少的网站,如果没有那就积少成多,多增加网站外部链接。
注意:如果这个网站没有被Google收入,可能是作弊被K了,最好不要和它做连接。一般建站很久了,没被收入的多是被K过了。
二、被知名网络目录收录
Google的Pagerank系统对有些门户网络目录如DMOZ,Yahoo和Looksmart尤为器重。被这些目录收入后,PR值会立即得到提升,但要被这些目录收入是很难的,当然有钱什么都好办。对大多数人来说这方法不实用。
总结:最实用的方法是增加网站外部链接的质量和数量
网站会员登陆机制
1.登录后,把用户信息写入在线用户表,并把 Username 和 Password 写入用户的 Cookie 中
2.访问页面时,读取 Cookie 中的 Username、Password,查询在线用户表,判断是否登录过
3.定时清理在线用户表中过期的用户
这样每次登陆用户访问页面时,只要查询在线用户表,不需要查询数据库中的用户表。
在线用户表是缓存表,不是一个数据表
C# 实现
InfoUser 类存放用户的信息
ArrayList 类中存放 InfoUser 类
当用户登录后,把用户的 InfoUser 类加入 ArrayList 类中,ArrayList 类是一个静态类
每次读取 Cookie 中的 Username、Password,再遍历 ArrayList 中的 InfoUser,如果配上,表示是登录用户。