Archives for 五月 2011

post

C#以二进制存储图片

图片的常见存储与读取凡是有以下几种:
存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].

[csharp]
///1.参数是图片路径:返回Byte[]类型:
public byte[] GetPictureData(string imagepath)
{
/**/////根据图片文件的路径使用文件流打开,并保存为byte[]
FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法
byte[] byData = new byte[fs.Length];
fs.Read(byData, 0, byData.Length);
fs.Close();
return byData;
}
///2.参数类型是Image对象,返回Byte[]类型:
public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
//将Image转换成流数据,并保存为byte[]
MemoryStream mstream = new MemoryStream();
imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] byData = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(byData, 0, byData.Length);
mstream.Close();
return byData;
}
[/csharp]

好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程。
读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX

[csharp]
///1.参数是Byte[]类型,返回值是Image对象:
public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
}
///2.参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite)
public void WritePhoto(byte[] streamByte)
{
// Response.ContentType 的默认值为默认值为“text/html”
Response.ContentType = "image/GIF";
//图片输出的类型有: image/GIF image/JPEG
Response.BinaryWrite(streamByte);
}
[/csharp]

补充:
针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型: Response.ContentType = “application/msword”;
Response.ContentType = “application/x-shockwave-flash”;
Response.ContentType = “application/vnd.ms-excel”;
另外可以针对不同的格式,用不同的输出类型以适合不同的类型:
[csharp]
switch (dataread("document_type"))
{
case "doc":
Response.ContentType = "application/msword";
case "swf":
Response.ContentType = "application/x-shockwave-flash";
case "xls":
Response.ContentType = "application/vnd.ms-excel";
case "gif":
Response.ContentType = "image/gif";
case "Jpg":
Response.ContentType = "image/jpeg";
}
[/csharp]

post

Asp.net导出Excel/Csv文本格式数据

导出到Excel/Csc文件并不难,所以就有好多方法:控件直接Render、把DataSet输出成String再Write出来等,(当然如果调用 Excel程序的库文件的话还可以使用更强的直接操作Excel的方法,但这种方法用于Web服务显得有点要求太高:必须让Web服务器安装指定版本的 Excel或其支持库文件)。就其前两种方法,实际上也是一样的,Render也是把由DataSet转变的View生成为一个Table输出到客户端而已,只不过隐藏了细节,如果不信,你用EditPlus什么的看看生成的.xls文件就知道了。

Excel 的识别力太强了,以至于它本身的格式、Csv格式、Tab分隔符格式、网页的Table格式等都能够很好的打开。但是它“太聪明”了,以至于自动识别数字和字符串,而且要把超过11位的数字自动变为科学计数法的格式,你试试输入 “123456789012”,离开那个单元格,就成“123457E+11” 了,够聪明的吧,不过有时会让我们感觉不便,因为我输入的就是我自己的身份证号码,尾巴上没有“X”,本来好好的15位数字,得现在成这么个计数法了。那我就改改显示格式吧,改为把数字显示为文本,好了。可是国家的身份证升级了,号码变成18位,我把它输入到数据库,导出来时,用刚才的方法处理过,18位没错,可是最后三位怎么都是零了!Excel为我们做了太多的事,不管是应该的还是不应该的。

怎么解决?请看代码:(以下代码中最有用的一句其实是:<td style=”vnd.ms-excel.numberformat:@”>,此句会忽略EXCLE默认的科学计数法,导出的表格就会以文本格式显示数字了)

[csharp]
public static string ExportTable(DataSet ds)
{
string data = "";
//data = ds.DataSetName + "\n";

foreach (DataTable tb in ds.Tables)
{
//data += tb.TableName + "\n";
data += "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">";
//写出列名
data += "<tr style=\"font-weight: bold; white-space: nowrap;\">";
foreach (DataColumn column in tb.Columns)
{
data += "<td>" + column.ColumnName + "</td>";
}
data += "</tr>";
//写出数据
foreach (DataRow row in tb.Rows)
{
data += "<tr>";
foreach (DataColumn column in tb.Columns)
{
if (column.ColumnName.Equals("证件编号") || column.ColumnName.Equals("报名编号"))
data += "<td style=\"vnd.ms-excel.numberformat:@\">" + row[column].ToString() + "</td>";
else
data += "<td>" + row[column].ToString() + "</td>";
}
data += "</tr>";
}
data += "</table>";
}
return data;
}
public static void ExportDsToXls(Page page, string sql)
{
ExportDsToXls(page, "FileName", sql);
}
public static void ExportDsToXls(Page page, string fileName, string sql)
{
DataSet ds = DBUtil.GetDataSet(sql);
if (ds != null) ExportDsToXls(page, fileName, ds);
}
public static void ExportDsToXls(Page page, DataSet ds)
{
ExportDsToXls(page, "FileName", ds);
}
public static void ExportDsToXls(Page page, string fileName, DataSet ds)
{
page.Response.Clear();
page.Response.Buffer = true;
page.Response.Charset = "GB2312";
//page.Response.Charset = "UTF-8";
page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + System.DateTime.Now.ToString("_yyMMdd_hhmm") + ".xls");
page.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
page.Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
page.EnableViewState = false;
page.Response.Write(ExportTable(ds));
page.Response.End();
}
//style="vnd.ms-excel.numberformat:@" 可以去除自动科学计数法的困扰
//输出为Table,能够最大限度的减少字段中数据对生成的文件格式的影响,在这里我没有处理数据中含有HTML标签的情况 在页面后台中,这样使用就可以了:

protected void lbtnToExcel_Click(object sender, EventArgs e)
{
string strWhere = BuildSearchWhereString();
string strOrder = this.hidOrderString.Value;
string sql = "SELECT 报名编号, 证件编号, 姓名, 考区考点, 报考类别, "
+ "行政区划名称 AS 行政区划, 单位名称 AS 工作单位, 毕业学校名称, 毕业专业名称 AS 毕业专业, 毕业年月, "
+ "通讯地址, 性别"
+ " from [VW报名]";
if (!string.IsNullOrEmpty(strWhere)) sql += " where " + strWhere;
if (!string.IsNullOrEmpty(strOrder)) sql += " order by " + strOrder;
else sql += " order by [报考类别]";
PageExport.ExportDsToXls(this.Page, "BaoMing", sql);
dataBind();
}
[/csharp]

post

UltraEdit中常用使用正则表达式

转自:http://baizheng.iteye.com/blog/37637

很多朋友都用过或者正在用UltraEdit,这个编辑器陪伴我也好几年了,从很多地方影响着我写代码的快捷键习惯,Ultraedit提供了非常丰富的编辑功能,其中非常重要的查找和替换功能一定大家都用过,Ultraedit提供的查找替换功能非常方便和强大,可以在单独文件里面查找替换,也可以在多个文件、多个目录里面进行查找替换。而我们在使用这些查找替换功能的时候,一般都是针对某个字符串进行,前两天我要对一个目录下(包含子目录)所有的html文件中某一段代码进行查找替换,一下子不知道怎么操作了,由于长期写程序用到正则表达式,于是猜想具备如此强大功能的Ultraedit一定也有这样类似的匹配功能,于是点击Help一看,果然不出所料,Ultraedit支持基本的正则表达式匹配查找和替换功能,这能满足我们几乎全部的需要了。
[Read more…]

post

各大搜索引擎的Ping服务RPC地址

转载自:[Lin’s Space|Only]

本文链接: http://clin003.com/search-engine/search-engine-ping-services-address-260/

wordpress的更新通知服务,在后台-设置-撰写的文本框内输入下面的ping地址即可,发布文章的时候就会通知到其他的网站。

前些天我是用啦抓虾的ping服务,这个服务可以在第一时间把我的文章提交给抓虾让她来抓取我的文章,只要你的博客具有rss输出就可以使用这样ping的服务。ping服务分为手动和自动,今天我整理啦一些手动的ping服务地址,欢迎大家来分享这里没有提到的ping服务地址。
[Read more…]

post

优化百度、Bing对WordPress博客的收录

转载自:CrazyFeng [http://crazyfeng.com];
原文链接:http://crazyfeng.com/wordpress-baidu-seo.html

刚使用wordpress时,不懂得如何优化。等了好长一段时间,在搜索引擎中搜索:

site:xxx.com 时,发现百度对wordpress十分不友好,只收录了首页。而google却收录了大部分,但tag页面很多。从51.la统计数据来看,很多来访者都是从tag页面、分类目录页面进入的,而我希望访问者看的是我的文章页面。又等了好长一段时间,google几乎完全收录了文章内页,而百度开始收录tag页面了,但文章页面才寥寥的几页,每天从百度来的流量少得可怜。后来经过探索发现,默认情况下,wordpress的重复内容很多,wordpress是外国的东西,百度是本土的企业,两者之间存在隔阂。

知道了问题的所在,接下来的事情就好办了,围绕减少内容重复的角度去做:
[Read more…]

post

WordPress更改域名后无法访问的解决方案

之前一直在用主机提供商的三级域名,今天备案才通过,在wordpres的常规设置中设置新的域名后,后台无法访问,前台读取的主题文件也找不到。直接修改数据库也容易出错。

下面提供一个解决方案,简单实用,不过设置后,稍等一会才会访问正常。
[Read more…]

post

ASP.NET中禁止继承IIS根目录的web.config的配置

在我们的ASPNET虚拟目录应用中,有时会出现一些异常,比如在根目录的web.config中添加了HttpHandler以及HttpModule(如一些UrlRewiter重写组件、自己的全局HttpModule等)在虚拟目录运行时就会提示找不到找不到指定的文件的异常。

解决方法是在根目录的web.config中针对根路径通过location配置这些module和handler等, 并且在location设置允许子目录重写,以及是否被子集应用程序继承设置为false,如下把 包含在结点内部:

[xml collapse=”false”]
<configuration>
<location path="." allowOverride="true" inheritInChildApplications="false">
<system.web>
<httpModules>
<add name="UrlRewriteModule"
type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
</system.web>
</location>
</configuration>
[/xml]

这样配置后就不会影响到我们的子集应用程序了,即虚拟目录等.