posted @ 2010-02-22 20:59 Minja 阅读(784) 评论(0)
编辑
posted @ 2010-02-22 20:51 Minja 阅读(276) 评论(0)
编辑
按照我们中文的习惯,在日常使用中,对于周几的说法,都是 “星期?” 的格式, 而不是 Sunday, Monday, … 这种E文的形式。
.NET 里面对 星期几 的返回, 通常使用 DayOfWeek 这个enum的形式,返回的是 0 ~ 6 的数值,默认情况下 表示 周日 ~ 周六。
如果要返回中文习惯的星期几,只需做一个简单的转换:
////dt 是需要返回星期几的具体日期
////下面的实现方式,是采用的默认每周的第一天是Sunday(星期日)
public static string CnWeekDayName(DateTime dt)
{
string[] cnWeekDayNames = {"日", "一", "二", "三", "四", "五", "六"};
return "星期" + cnWeekdayNames[(int)dt.DayOfWeek];
}
posted @ 2010-02-22 20:51 Minja 阅读(50) 评论(0)
编辑
posted @ 2010-02-22 20:47 Minja 阅读(104) 评论(0)
编辑
SQLite 是目前比较流行的一个开源、免费的小型的Embeddable RDBMS(关系型数据库),用C实现,内存占用较小,支持绝大数的SQL92标准,个别不支持的情况,在这里说明
对各种语言的支持也比较不错,wrapper很多。
Google Gears 、Mozilla 和 Adobe AIR 都在使用sqlite,应该说明其还是很不错的
SQLite 的关键字列表,这里
支持的sql语法,在这里
在 .NET 里面使用 SQLite, 我这里使用的wrapper是 System.Data.SQLite,它只需要一个dll,接口符合ADO.Net 2.0的定义,性能也不错,NHibernate用的也是它,目前支持ADO.NET 3.5了,支持集成在 VS2005 和 VS2008里面,而且支持wince,是个亮点
因为符合ADO.NET的规范,所以使用方式,基本和 SqlClient, OleDb等原生的一致
using System.Data;
using System.Data.SQLite;
//...
using (SQLiteConnection cn = new SQLiteConnection(
"Data Source=Test.db3;Pooling=true;FailIfMissing=false")
)
{
//在打开数据库时,会判断数据库是否存在,如果不存在,则在当前目录下创建一个
cn.Open();
using (SQLiteCommand cmd = new SQLiteCommand())
{
cmd.Connection = cn;
//建立表,如果表已经存在,则报错
cmd.CommandText = "CREATE TABLE [test] (id int, name nvarchar(20))";
cmd.ExecuteNonQuery();
//插入测试数据
for (int i = 2; i < 5; i++)
{
cmd.CommandText = string.Format("INSERT INTO [test] VALUES ({0}, '中文测试')", i);
cmd.ExecuteNonQuery();
}
for (int i = 5; i < 10; i++)
{
cmd.CommandText = string.Format("INSERT INTO [test] VALUES ({0}, 'English Test')", i);
cmd.ExecuteNonQuery();
}
//读取数据
cmd.CommandText = "SELECT * FROM [test]";
using (SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (dr.Read())
{
Console.WriteLine("第{0} 条:{1}", dr.GetValue(0), dr.GetString(1));
}
}
}
}
posted @ 2010-02-22 20:38 Minja 阅读(338) 评论(0)
编辑
本篇,我们用到了COM引用,因为不使用COM引用的话,操作太过繁琐了 
一、 添加 COM 引用
在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可
二、 引入命名空间
三、 添加允许通过防火墙的例外程序
//创建firewall管理类的实例
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//创建一个认证程序类的实例
INetFwAuthorizedApplication app = (INetFwAuthorizedApplication)Activator.CreateInstance(
Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication"));
//在例外列表里,程序显示的名称
app.Name = "自定义";
//程序的决定路径,这里使用程序本身
app.ProcessImageFileName = Application.ExecutablePath;
//是否启用该规则
app.Enabled = true;
//加入到防火墙的管理策略
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(app);
四、删除一个例外 列表 里的程序
INetFwMgr netFwMgr = (INetFwMgr)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwMgr"));
//参数为程序的绝对路径
netFwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(Application.ExecutablePath);
posted @ 2010-02-22 20:31 Minja 阅读(236) 评论(0)
编辑
日期时间的输出和显示,在日常应用中,是最普遍的了。因为不同的情况,我们通常需要将日期时间以各种不同的样式格式化后输出,而不是简单的显示。
日期时间、数字、货币等的格式,默认情况下是受操作系统的区域设置影响的,在程序里,就体现在 当前线程的culture上(Thread.CurrentThread.CurrentCulture),为了避免区域不同的影响,我们通常需要设置
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
虽然 System.DateTime 本身已经具有了不少现成的格式化输出,例如: ToLongDateString, ToShortTimeString, ToUniversalTime 等,但是却远远不能满足我们实际的需要,这就要用到了 DateTime.ToString,就要提到 DateTimeFormatInfo 了,见下面的 MSDN 说明:
具体使用时的格式参见:
|
格式模式 |
说明 |
|
d、%d |
月中的某一天。一位数的日期没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%d”。 |
|
dd |
月中的某一天。一位数的日期有一个前导零。 |
|
ddd |
周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 |
|
dddd |
周中某天的完整名称,在 DayNames 中定义。 |
|
M、%M |
月份数字。一位数的月份没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%M”。 |
|
MM |
月份数字。一位数的月份有一个前导零。 |
|
MMM |
月份的缩写名称,在 AbbreviatedMonthNames 中定义。 |
|
MMMM |
月份的完整名称,在 MonthNames 中定义。 |
|
y、%y |
不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。如果该格式模式没有与其他格式模式组合,则指定“%y”。 |
|
yy |
不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 |
|
yyyy |
包括纪元的四位数的年份。 |
|
gg |
时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 |
|
h、%h |
12 小时制的小时。一位数的小时数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%h”。 |
|
hh |
12 小时制的小时。一位数的小时数有前导零。 |
|
H、%H |
24 小时制的小时。一位数的小时数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%H”。 |
|
HH |
24 小时制的小时。一位数的小时数有前导零。 |
|
m、%m |
分钟。一位数的分钟数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%m”。 |
|
mm |
分钟。一位数的分钟数有一个前导零。 |
|
s、%s |
秒。一位数的秒数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%s”。 |
|
ss |
秒。一位数的秒数有一个前导零。 |
|
f、%f |
秒的小数精度为一位。其余数字被截断。如果该格式模式没有与其他格式模式组合,则指定“%f”。 |
|
ff |
秒的小数精度为两位。其余数字被截断。 |
|
fff |
秒的小数精度为三位。其余数字被截断。 |
|
ffff |
秒的小数精度为四位。其余数字被截断。 |
|
fffff |
秒的小数精度为五位。其余数字被截断。 |
|
ffffff |
秒的小数精度为六位。其余数字被截断。 |
|
fffffff |
秒的小数精度为七位。其余数字被截断。 |
|
F、%F |
显示秒的小数部分的最高有效数字。如果该数字为零,则不显示任何内容。如果该格式模式没有与其他格式模式组合,则指定“%F”。 |
|
FF |
显示秒的小数部分的两个最高有效数字。但是,不显示尾随的零(两个零数字)。 |
|
FFF |
显示秒的小数部分的三个最高有效数字。但是,不显示尾随的零(三个零数字)。 |
|
FFFF |
显示秒的小数部分的四个最高有效数字。但是,不显示尾随的零(四个零数字)。 |
|
FFFFF |
显示秒的小数部分的五个最高有效数字。但是,不显示尾随的零(五个零数字)。 |
|
FFFFFF |
显示秒的小数部分的六个最高有效数字。但是,不显示尾随的零(六个零数字)。 |
|
FFFFFFF |
显示秒的小数部分的七个最高有效数字。但是,不显示尾随的零(七个零数字)。 |
|
t、%t |
在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。如果该格式模式没有与其他格式模式组合,则指定“%t”。 |
|
tt |
在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 |
|
z、%z |
时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。如果该格式模式没有与其他格式模式组合,则指定“%z”。 |
|
zz |
时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 |
|
zzz |
完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 |
|
: |
在 TimeSeparator 中定义的默认时间分隔符。 |
|
/ |
在 DateSeparator 中定义的默认日期分隔符。 |
|
% c |
其中 c 是格式模式(如果单独使用)。也就是说,若要单独使用格式模式“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”或“M”,请指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。
如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。 |
|
\ c |
其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。 |
posted @ 2010-02-22 20:30 Minja 阅读(26) 评论(0)
编辑
我们有时候,需要知道某个网络资源是否有效、可用,但是我们并不想打开或下载这个资源,因为这个资源可能很大(例如需要下载的某个文件)
一种行之有效的方式,就是利用HTTP头返回的状态码来确定资源的可用性;我们通常的WEB访问,使用的是 GET 和 POST, 这里使用的是 HEAD 方式
static bool IsWebResourceAvailable(string webResourceAddress)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(webResourceAddress));
req.Method = "HEAD";
req.Timeout = 1000;
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
return (res.StatusCode == HttpStatusCode.OK);
}
catch (WebException wex)
{
System.Diagnostics.Trace.Write(wex.Message);
return false;
}
}
上面的函数中, webResourceAddress 是资源的地址,
如果资源可用,返回 true, 否则返回 false
posted @ 2010-02-22 20:28 Minja 阅读(96) 评论(0)
编辑
用httpwebrequest访问一个SSL类型的地址 https://xxxx 时,报错 “未能为 SSL/TLS 安全通道建立信任关系(Could not establish trust relationship for the SSL/TLS secure channel)”
查了下MSDN,找到了解决方法,SSL网站,连接时需要提供证书,对于非必须提供客户端证书的情况,只要返回一个安全确认即可。但是此方法的实现,在.NET 1.1 和 .NET 2.0 下是不同的,下面写出2个framework版本下的实现方法:
使用的命名空间:
using System.Net;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
.Net 2.0
public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
//直接确认,否则打不开
return true;
}
private void button1_Click(object sender, EventArgs e)
{
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
HttpWebRequest req = (HttpWebRequest)WebRequest.CreateDefault(new Uri("https://zu14.cn/"));
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
//...正常使用了,和访问普通的 http:// 地址一样了
.Net 1.1
internal class AcceptAllCertificatePolicy : ICertificatePolicy
{
public AcceptAllCertificatePolicy()
{
}
public bool CheckValidationResult(ServicePoint sPoint, System.Security.Cryptography.X509Certificates.X509Certificate cert, WebRequest wRequest, int certProb)
{
//直接确认
return true;
}
}
private void button1_Click(object sender, EventArgs e)
{
ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();
HttpWebRequest req = (HttpWebRequest)WebRequest.CreateDefault(new Uri("https://zu14.cn/"));
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
//...正常使用了,和访问普通的 http:// 地址一样了
posted @ 2010-02-22 20:26 Minja 阅读(367) 评论(0)
编辑