‘.NET’ 分类下的所有文章
2013三月8

linq基本操作

ADO.NET 评论关闭

基本 LINQ 查询操作

一,linq to datatable
1,查询数量
using System.Linq;

 dt.AsEnumerable()
                .Count(row => row.Field<string>("Column-A") == "Y"
                           || row.Field<string>("Column-A") == "N");
DataTable的select只能用一个条件。

2,top 1
dtExtOperate.AsEnumerable().First(dr => dr.Field<string>("RoleID") == "1101021");
XML:

return xdoc.Descendants("Cache").First(u => u.Attribute("key") != null && u.Attribute("key").Value == Key).Attribute("value").Value;

3,

关键字 var :

    指示编译器根据初始化语句右侧的表达式推断变量的类型。 推断类型可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。这样我们就可以在上述的LINQ表达式中 例如可简写为: var nums = from n in nums where .... orderby... select....

4,linq工具 http://www.linqpad.net/

5,linq延迟加载,在用的时候再执行

6,排重

// 
IEnumerable<DataRow> rows = dt.AsEnumerbale();
// 去重复
IEnumerable<DataRow> distinctRows = rows.Distinct(DataRowComparer.Default);

7,select many:选择多个输出列


string[] fullNames = { "Anne Williams", "John Fred Smith", "Sue Green" };
            IEnumerable<string> query = fullNames.SelectMany(name => name.Split());
            foreach (string name in query)
                Console.Write(name + "|"); // Anne|Williams|John|Fred|Smith|Sue|Green|

8,查询是否存在
dtExtOperate.AsEnumerable().Any(dr => dr.Field<int>("MenuID") == MenuID)

9.出处

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

2013三月7

数据库缓存

ASP.NET 评论关闭

SqlDependency类有一OnChangeEventHandler方法,可注册委托,当接收到改变时,用委托实施数据更改自动通知前台
例:http://www.360doc.com/content/09/0609/16/32573_3830694.shtml
用此方法可实现删除过期的缓存。要注意的
是command 指定的 commandText 的查询结果发生变化时触发 OnChange,且只触发一次,故需要在触发事件中再次建立依赖和绑定接受通知.sqlDependency start后,会开户一个线程等待,当通知由服务器的service Broker传来的时候,线程收到信息,调用回调函数

sqlDependency的start与stop都是控制线程的开关,注意此线程是全局性的,共享。

不过.net同时有SqlCacheDependency,可自动完成删除缓存的操作。

相关sql:

–订阅
–在做出通知后,会进行删除,所以需要重新订阅
 
select * from sys.dm_qn_subscriptions
 
–信息对接
SELECT TOP 50 * 
FROM sys.transmission_queue

–关掉订阅
KILL QUERY NOTIFICATION SUBSCRIPTION  10

要达到的效果:
将数据库中的数据放到缓存中,当数据变化时,自动通过应用删除缓存
Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查,
Sql server 2005/2008下增加使用查询通知方式进行缓存失效检查。

实施:
参考:http://space.itpub.net/16436858/viewspace-630489
http://www.cnblogs.com/over140/archive/2009/01/15/1376318.html

1.检测是否已经启用Service Broker

  Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabled')  — 1 表示已经启用 0 表示没有启用

2.启用Service Broker                   

  ALTER DATABASE 数据库名称 SET ENABLE_BROKER;              

 –WITH ROLLBACK IMMEDIATE;
GO
 

3.给您的数据库访问帐号授予权限

  GRANT SUBSCRIBE QUERY NOTIFICATIONS TO test

  注意:这一步非常重要, 如果没有权限, 数据库改变的通知将无法接收, cache永远都不会被刷新,注意 sa授此权限(ms禁止), 所以,换个数据库访问帐号即可.
或者用:alter authorization on database::[<your_SSB_DB>] to [sa];
4,缓存代码

/// <summary>
    /// 设置表依赖缓存
    /// </summary>
    public static DataTable GetTableCache(string TableName, string CacheDataBase,string ConnStr)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        DataTable dt = new DataTable();
        //objCache.Insert(CacheKey, objObject);
        if (objCache[TableName] == null)
        {
            try
            {
                //get from database
                DataSet ds = new DataSet();
 
                SqlDependency.Start(ConnStr);//启动与关闭放在Global的Application_Start,End中好一些
 
                using (SqlConnection connection = new SqlConnection(ConnStr))
                {
                    //只有sql中指定的字段发生更改时才会提醒。
                    string sql = string.Format(" SELECT ID,ParentID,Name,OrderBy,OrganID FROM dbo.mdCity");
 
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        SqlCacheDependency dependency = new SqlCacheDependency(command);
 
                        //using (SqlDataAdapter adapter = new SqlDataAdapter()) //查询数据
                        //{
                        //    adapter.SelectCommand = command;
                        //    adapter.Fill(ds);
                        //}
 
                        //HttpRuntime.Cache.Insert("EntityResourceCollection", ds, dependency);
                        connection.Open();
                        dt.Load(command.ExecuteReader(CommandBehavior.CloseConnection));
                        objCache.Insert(TableName, dt, dependency);
                    }
 
                }
 
 
            }
            catch
            {
 
            }
 
        }
        else
        {
            dt = (DataTable)objCache[TableName];
        }
 
        return dt;
    }

5,注意 只有sql中指定字段发生更改时才会提醒。

关于SqlDependency类,它的限制很多,特别要注意的就是command的sql语句问题:
select id,name from dbo.test where id<>4 order by id desc 
他只能支持上面这样的简单语句
表名前需要架构名,如dbo

sql注意

满足下列要求的 SELECT 语句支持查询通知:

  • 必须显式说明 SELECT 语句中提取的列,并且表名必须限定为两部分组成的名称。注意,这意味着语句中引用的所有表都必须处于同一数据库中。
  • 语句不能使用星号 (*) 或 table_name.* 语法指定列。
  • 语句不能使用未命名列或重复的列名。
  • 语句必须引用基表。
  • 语句不能引用具有计算列的表。
  • 在 SELECT 语句中提取的列不能包含聚合表达式,除非语句使用 GROUP BY 表达式。提供 GROUP BY 表达式时,选择列表便可以包含聚合函数 COUNT_BIG() 或 SUM()。但是,不能为可为空的列指定 SUM()。语句不能指定 HAVING、CUBE 或 ROLLUP。
  • 在用作简单表达式的 SELECT 语句中提取的列不能多次显示。
  • 语句不能包含 PIVOT 或 UNPIVOT 运算符。
  • 语句不能包含 UNION、INTERSECT 或 EXCEPT 运算符。
  • 语句不能引用视图。
  • 语句不能包含下列任意一个:DISTINCT、COMPUTE、COMPUTE BY 或 INTO。
  • 语句不能引用服务器全局变量 (@@variable_name)。
  • 语句不能引用派生表、临时表或表变量。
  • 语句不能从其他数据库或服务器中引用表或视图。
  • 语句不能包含子查询、外部联接或自联接。
  • 语句不能引用下列大型对象类型:textntext 和 image
  • 语句不能使用 CONTAINS 或 FREETEXT 全文谓词。
  • 语句不能使用行集函数,包括 OPENROWSET 和 OPENQUERY。
  • 语句不能使用下列任何一个聚合函数:AVG、COUNT(*)、MAX、MIN、STDEV、STDEVP、VAR 或 VARP。
  • 语句不能使用任何具有不确定性的函数,包括排名函数和窗口函数。
  • 语句不能包含用户定义聚合。
  • 语句不能引用系统表或视图,包括目录视图和动态管理视图。
  • 语句不能包含 FOR BROWSE 信息。
  • 语句不能引用队列。
  • 语句不能包含无法更改和无法返回结果的条件语句(如 WHERE 1=0)。
  • 语句不能指定 READPAST 锁提示。
  • 语句不能引用任何 Service Broker QUEUE。
  • 语句不能引用同义词。
  • 语句不能具有基于 double/real 数据类型的比较或表达式。
2013三月3

缓存XML

ASP.NET 评论关闭

将配置信息放到XML中,利用cache放到内存中,同时增加一文件依赖,保证配置文件改变时自动删除缓存。

 private DataTable GetData()
        {
            DataTable tableData = new DataTable();
            if (Cache["data"] == null)
            {
                DataSet ds = new DataSet();
                string filePath = Server.MapPath("~/XMLFile.xml");
                ds.ReadXml(filePath);
                tableData = ds.Tables[0];
                CacheDependency cdy = new CacheDependency(filePath);
                Cache.Insert("data", tableData, cdy);
               
            }
            else
            {
                tableData = (DataTable)Cache["data"];
            }
            return tableData;
        }
    

——-

<?xml version="1.0" encoding="utf-8" ?>
<book>
  <item>
    <bookName>算法设计</bookName>
    <author>清华</author>
  </item>
  <item>
    <bookName>高级数据库技术</bookName>
    <author>中山大学</author>
  </item>
</book>
2013三月2

linq to xml

ASP.NET 评论关闭
  XDocument xdoc = XDocument.Load(@"XMLFile1.xml");
            var product = from u in xdoc.Descendants("product")
                        where u.Parent.Attribute("urlKeyWords").Value.IndexOf("postpar") >= 0
                        select u;
            foreach (var u in product)
            {
                string name = u.Attribute("text").Value;
                Console.WriteLine(name);
            }
            Console.Read();

<?xml version="1.0" encoding="utf-8" ?>

<Products>
<WebSite urlKeyWords="postpartum">
<product text="dd" value="dd" amount ="1000"></product>
<product text="dd1" value="dd1" amount ="2000"></product>
<product text="dd2" value="dd2" amount ="3000"></product>
<product text="dd3" value="dd3" amount ="4000"></product>
</WebSite>
<WebSite urlKeyWords="aaaaaa">
<product text="aa" value="aa" amount ="11"></product>
<product text="aa2" value="aa2" amount ="112"></product>
<product text="aa3" value="aa3" amount ="113"></product>
 
</WebSite>
<WebSite urlKeyWords="bbbbbb">
<product text="bbbb" value="bbbb" amount ="22"></product>
<product text="bbbb22" value="bbbb22" amount ="2222"></product>
</WebSite>
</Products>
 
2013一月16

伪静态 URL重写

ASP.NET 评论关闭

1,引入DLL
2,配置对应关系html与aspx
3,加入配置
4,IIS中配置isapi,以解析html

参考:http://www.bingd.com/blog/html/UrlRewriter.htm
参考:http://blog.zhaojie.me/2008/01/url-rewrite-2.html

2012十一月13

服务器推送信息到客户端signalR

ASP.NET 评论关闭

Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架。它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息。
http://blog.csdn.net/kesalin/article/details/8166925

2012十月19

TFS使用

ASP.NET 评论关闭

1.什么是TFS

1.1.TFS(Team Foundation Server )

1.2.与VS集成在一起的版本控制,团队协作的工具

 

2.为什么选择TFS

2.1.VSS最高是2005版本

2.2.TFS是VSS的高级版本,替代版本

2.3.TFS提供VSS没有的功能

 

2.3.1.项目化

2.3.1.1.bug管理

2.3.1.2.报表统计

2.3.1.3.每一个项目可以有网站,与sharepoint连接在一起

2.3.2.多人签出同一文件

2.3.3.分支

2.3.3.1.使用纯分支模型

2.3.3.2.引入分支可视化

2.3.4.可定时备份

 

 

2.4.界面对比(左:TFS 右:VSS)
TFS <--> VSS

TFS <–> VSS

 

 

 

 

 

3.如何使用

3.1.连接

3.1.1.更改源代码控制方式

从IDE菜单中选择“工具(Tools)”->“选项(Options)”,在选项对话框中,找到源代码管理(Source Control | Plug-in),然后选择Visual Studio Team Foundation Server

源代码控制工具更改源代码控制工具更改

 

 

 

 

 

 

3.1.2.连接

 

为避免每次连接TFS都要输入账号密码,请执行记住账号操作:

1. 单击“开始”,单击“运行”,键入“control userpasswords2” 或 输入“control keymgr.dll”

2. 单击“高级”选项卡,然后单击“管理密码”。

 

 

配置连接TFS服务器的账号 (账号名密码都是每人的姓名拼音)

 

配置账号配置账号


 

 

 

 

 

 

 

 

 

3.1.2.2.执行连接

连接到TFS服务器连接到TFS服务器


 

 

 

 

 

 

 

3.1.3.映射

团队资源管理器视图中找到一项目,双击源代码管理,更改映射 
映射项目

映射项目

 

 

 

 

3.2.签入:签入的时候可以添加注释,在历史中可看到

 

3.3.签出:可多人签出一个文件

多人签出同一文件多人签出同一文件
2012十月19

vss迁移到tfs

ASP.NET 评论关闭

一、安装

1,安装sqlserver2008 r2

2,安装sharepoint (http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=14117http://www.microsoft.com/zh-cn/download/details.aspx?id=20614)

3,安装TFS2010并补 (http://www.microsoft.com/zh-cn/download/details.aspx?id=15070http://www.microsoft.com/zh-cn/download/details.aspx?id=20506)

4,安装team explorer以便在服器上vs team explorertfs2010安装文件下

5,安装tfs powertools (http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f)

 

二、实施迁移

 (http://msdn.microsoft.com/zh-tw/vstudio/gg983556(zh-tw)http://msdn.microsoft.com/zh-cn/library/ms181247(v=vs.80).aspx如何VSS移到TFS2010.pdf)

1,?? VSS 版本必?是 2005

2,安? KB947647,?至下列?址下??安?至 TFS 伺服器上: http://code.msdn.microsoft.com/KB947647/Release/ProjectReleases.aspx?ReleaseId=1028

3,全部checkin

4,使用 Visual SourceSafe 分析用工具复数中的据完整性问题

5,?? VSS ?料?目???一,如 C:\VSSDB,拷?至 TFS 伺服器上,??定在 TFS 上有安? Team Explorer

6,在VS上建立目集合对应VSS上的

7,建立 analysissettings.xml ?定?,存於 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE目?:行:VSSConverter.exe analyze analysissettings.xml 
   例:
   <?xml version="1.0" encoding="utf-8"?>

<SourceControlConverter>
  <ConverterSpecificSetting>
    <Source name="VSS">
      <VSSDatabase name="J:\vss\LvJian_VSS"></VSSDatabase>
      <UserMap name="c:\Migrate\Usermap.xml"></UserMap>
       <SQL Server="LVSHOU-WEBSERVE\SQL2008"></SQL>
    </Source>
    <ProjectMap>
	   <Project Source="$/BIM" Destination="$/BIM"></Project>
		<Project Source="$/Common" Destination="$/Common"></Project>
		<Project Source="$/DBManage" Destination="$/DBManage"></Project>
    </ProjectMap>
  </ConverterSpecificSetting>
  <Settings>
       <TeamFoundationServer name="lvshou-webserver" port="88" protocol="http" collection="tfs/MySystem" ></TeamFoundationServer>
    <Output file="Analysis.xml"></Output>
  </Settings>
</SourceControlConverter>

8,?行成功後?在目前目?出?”Analysis.xml”,一映射文件 (usermap.xml)。?面是分析?果,若????息,???C:\migrate\Usermap.xml,??VSS????至TFS??

9,建立系统账号,在usermap.xml中与VSS原账号对应

10,最合成:? Analysis.xml ?除,方可重??行 VSSConverter.exe,?指令更改如下: VSSConverter.exe migrate analysissettings.xml

在管理工具中lock VSS,关闭VSS

2012八月18

IIS7.5 应用程序虚拟目录改名

ASP.NET 评论关闭

在IIS 6中我们可以直接右击改名称,是因为可以改metabase,但IIS 7不再有metabae,直接更改方式不行,可采用命令方式来完成。

1.应用程序改名
C:\Windows\System32\inetsrv>appcmd list app
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "Default Web Site/WebAnalytics.UI" (applicationPool:DefaultAppPool)

C:\Windows\System32\inetsrv>appcmd set app "Default Web Site/WebAnalytics.UI" -path:/WebAnalytics.UI_Snake
APP 对象“Default Web Site/WebAnalytics.UI”已更改

2.虚拟目录改名
C:\Windows\System32\inetsrv>appcmd list vdir
VDIR "Default Web Site/" (physicalPath:%SystemDrive%\inetpub\wwwroot)
VDIR "Default Web Site/test" (physicalPath:D:\)

C:\Windows\System32\inetsrv>appcmd set vdir "Default Web Site/test" -path:/snake

VDIR 对象“Default Web Site/test”已更改
2012八月18

IIS7.5 应用程序与虚拟目录的区别

ASP.NET 评论关闭

1,应用程序是一个逻辑边界,这个逻辑边界可以分隔网站及其组成部分。虚拟目录则是一个真实的指针,这个指针指向了一个本地或远程物理路径。虚拟目录总是存在于应用程序之中,一个应用程序可包括多个虚拟目录。
2,直观的区别比如应用程序可以设置应用程序池,而虚拟目录则没有。
3,如一网站有两个应用程序,因为这两个应用程序相互之间是分离的,因此也无法共享InProc会话状态、应用程序文件、文件夹。而虚拟目录可以共享InProc会话状态和缓存,因为这两个虚拟目录是同一个应用程序的组成部分。

参考:http://www.cnblogs.com/guilipan/archive/2010/10/05/1500311.html

2012八月18

一般处理程序ashx

ASP.NET 评论关闭

ashx相当于c#+html,免去了一些aspx的页面处理控件处理页面的部分.
用来ajax获取数据比用纯aspx效率要高

ashx是一个专门的用于处理HttpHandler的文件类型,用来处理自定义Http请求,可以在web.config定义运行时针对ashx的Http请求处理方式。

<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" validate="false" />

.ashx 文件用于写web handler的。HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。
利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态文本等内容。

2012六月16

DataReader是否自动关闭

ASP.NET 评论关闭

1,若是用于数据绑定,如gridview,因使用MoveNext方法读取数据,该方法在结束后调用DataReader.Close()方法,故会
关闭datareader,是否关闭connection呢,要看执行时是否传了CloseConnection进去,若传了,则在DataReader.Close()关闭gridview的同时,会自动关闭connection
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
2,其它情况,因不能保证完全遍历完数据,所以最好要手工执行DataReader.Close()方法

2012一月13

验证码识别

参考:http://www.cnblogs.com/yuanbao/archive/2007/09/25/905322.html

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

namespace BallotAiying2
{
    class UnCodebase
    {
        public Bitmap bmpobj;
        public UnCodebase(Bitmap pic)
        {
            bmpobj = new Bitmap(pic);    //转换为Format32bppRgb
        }

        /// <summary>
        /// 根据RGB,计算灰度值
        /// </summary>
        /// <param name="posClr">Color值</param>
        /// <returns>灰度值,整型</returns>
        private int GetGrayNumColor(System.Drawing.Color posClr)
        {
            return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;
        }

        /// <summary>
        /// 灰度转换,逐点方式
        /// </summary>
        public void GrayByPixels()
        {
            for (int i = 0; i < bmpobj.Height; i++)
            {
                for (int j = 0; j < bmpobj.Width; j++)
                {
                    int tmpValue = GetGrayNumColor(bmpobj.GetPixel(j, i));
                    bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));
                }
            }
        }

        /// <summary>
        /// 去图形边框
        /// </summary>
        /// <param name="borderWidth"></param>
        public void ClearPicBorder(int borderWidth)
        {
            for (int i = 0; i < bmpobj.Height; i++)
            {
                for (int j = 0; j < bmpobj.Width; j++)
                {
                    if (i < borderWidth || j < borderWidth || j > bmpobj.Width - 1 - borderWidth || i > bmpobj.Height - 1 - borderWidth)
                        bmpobj.SetPixel(j, i, Color.FromArgb(255, 255, 255));
                }
            }
        }

        /// <summary>
        /// 灰度转换,逐行方式
        /// </summary>
        public void GrayByLine()
        {
            Rectangle rec = new Rectangle(0, 0, bmpobj.Width, bmpobj.Height);
            BitmapData bmpData = bmpobj.LockBits(rec, ImageLockMode.ReadWrite, bmpobj.PixelFormat);// PixelFormat.Format32bppPArgb);
            //    bmpData.PixelFormat = PixelFormat.Format24bppRgb;
            IntPtr scan0 = bmpData.Scan0;
            int len = bmpobj.Width * bmpobj.Height;
            int[] pixels = new int[len];
            Marshal.Copy(scan0, pixels, 0, len);

            //对图片进行处理
            int GrayValue = 0;
            for (int i = 0; i < len; i++)
            {
                GrayValue = GetGrayNumColor(Color.FromArgb(pixels[i]));
                pixels[i] = (byte)(Color.FromArgb(GrayValue, GrayValue, GrayValue)).ToArgb();      //Color转byte
            }

            bmpobj.UnlockBits(bmpData);
        }

        /// <summary>
        /// 得到有效图形并调整为可平均分割的大小
        /// </summary>
        /// <param name="dgGrayValue">灰度背景分界值</param>
        /// <param name="CharsCount">有效字符数</param>
        /// <returns></returns>
        public void GetPicValidByValue(int dgGrayValue, int CharsCount)
        {
            int posx1 = bmpobj.Width; int posy1 = bmpobj.Height;
            int posx2 = 0; int posy2 = 0;
            for (int i = 0; i < bmpobj.Height; i++)      //找有效区
            {
                for (int j = 0; j < bmpobj.Width; j++)
                {
                    int pixelValue = bmpobj.GetPixel(j, i).R;
                    if (pixelValue < dgGrayValue)     //根据灰度值
                    {
                        if (posx1 > j) posx1 = j;
                        if (posy1 > i) posy1 = i;

                        if (posx2 < j) posx2 = j;
                        if (posy2 < i) posy2 = i;
                    };
                };
            };
            // 确保能整除
            int Span = CharsCount - (posx2 - posx1 + 1) % CharsCount;   //可整除的差额数
            if (Span < CharsCount)
            {
                int leftSpan = Span / 2;    //分配到左边的空列 ,如span为单数,则右边比左边大1
                if (posx1 > leftSpan)
                    posx1 = posx1 - leftSpan;
                if (posx2 + Span - leftSpan < bmpobj.Width)
                    posx2 = posx2 + Span - leftSpan;
            }
            //复制新图
            Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
            bmpobj = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);
        }

        /// <summary>
        /// 得到有效图形,图形为类变量
        /// </summary>
        /// <param name="dgGrayValue">灰度背景分界值</param>
        /// <param name="CharsCount">有效字符数</param>
        /// <returns></returns>
        public void GetPicValidByValue(int dgGrayValue)
        {
            int posx1 = bmpobj.Width; int posy1 = bmpobj.Height;
            int posx2 = 0; int posy2 = 0;
            for (int i = 0; i < bmpobj.Height; i++)      //找有效区
            {
                for (int j = 0; j < bmpobj.Width; j++)
                {
                    int pixelValue = bmpobj.GetPixel(j, i).R;
                    if (pixelValue < dgGrayValue)     //根据灰度值
                    {
                        if (posx1 > j) posx1 = j;
                        if (posy1 > i) posy1 = i;

                        if (posx2 < j) posx2 = j;
                        if (posy2 < i) posy2 = i;
                    };
                };
            };
            //复制新图
            Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
            bmpobj = bmpobj.Clone(cloneRect, bmpobj.PixelFormat);
        }

        /// <summary>
        /// 得到有效图形,图形由外面传入
        /// </summary>
        /// <param name="dgGrayValue">灰度背景分界值</param>
        /// <param name="CharsCount">有效字符数</param>
        /// <returns></returns>
        public Bitmap GetPicValidByValue(Bitmap singlepic, int dgGrayValue)
        {
            int posx1 = singlepic.Width; int posy1 = singlepic.Height;
            int posx2 = 0; int posy2 = 0;
            for (int i = 0; i < singlepic.Height; i++)      //找有效区
            {
                for (int j = 0; j < singlepic.Width; j++)
                {
                    int pixelValue = singlepic.GetPixel(j, i).R;
                    if (pixelValue < dgGrayValue)     //根据灰度值
                    {
                        if (posx1 > j) posx1 = j;
                        if (posy1 > i) posy1 = i;

                        if (posx2 < j) posx2 = j;
                        if (posy2 < i) posy2 = i;
                    };
                };
            };
            //复制新图
            Rectangle cloneRect = new Rectangle(posx1, posy1, posx2 - posx1 + 1, posy2 - posy1 + 1);
            return singlepic.Clone(cloneRect, singlepic.PixelFormat);
        }

        /// <summary>
        /// 平均分割图片
        /// </summary>
        /// <param name="RowNum">水平上分割数</param>
        /// <param name="ColNum">垂直上分割数</param>
        /// <returns>分割好的图片数组</returns>
        public Bitmap [] GetSplitPics(int RowNum,int ColNum)
        {
            if (RowNum == 0 || ColNum == 0)
                return null;
            int singW = bmpobj.Width / RowNum;
            int singH = bmpobj.Height / ColNum;
            Bitmap [] PicArray=new Bitmap[RowNum*ColNum];

            Rectangle cloneRect;
            for (int i = 0; i < ColNum; i++)      //找有效区
            {
                for (int j = 0; j < RowNum; j++)
                {
                    cloneRect = new Rectangle(j*singW, i*singH, singW , singH);
                    PicArray[i*RowNum+j]=bmpobj.Clone(cloneRect, bmpobj.PixelFormat);//复制小块图
                }
            }
            return PicArray;
        }

        /// <summary>
        /// 返回灰度图片的点阵描述字串,1表示灰点,0表示背景
        /// </summary>
        /// <param name="singlepic">灰度图</param>
        /// <param name="dgGrayValue">背前景灰色界限</param>
        /// <returns></returns>
        public string GetSingleBmpCode(Bitmap singlepic, int dgGrayValue)
        {
            Color piexl;
            string code = "";
            for (int posy = 0; posy < singlepic.Height; posy++)
                for (int posx = 0; posx < singlepic.Width; posx++)
                {
                    piexl = singlepic.GetPixel(posx, posy);
                    if (piexl.R < dgGrayValue)    // Color.Black )
                        code = code + "1";
                    else
                        code = code + "0";
                }
            return code;
        }
    }
}
2011十二月2

图片识别-验证码

.NET,ASP.NET 评论关闭

参考:http://www.cnblogs.com/pmars/archive/2011/12/02/2271898.html

2011十月14

发布网站

ASP.NET 评论关闭

方法有三:
1,随机DLL名称:右键网站,发布即可。 注:页面对应cs文件名称是随机的,每次需要更新全部dll文件
2,固定名称DLL方法:右键网站-发布 固定名称打上√。注:页面对应cs文件名称是固定的,即一个cs一个dll,造成dll文件相当之大
3,使用microsoft提供的工具Web Deployment Projects,安装后,右击网站,添加部署项目,在项目上点生成,即会将所有dll合并成一个dll
www.microsoft.com/download/en/details.aspx?displaylang=en&id=25163#instructions

2011五月7

可视化的数据结构和算法[转载]

C#语法 评论关闭

基础

索引

  • 排序

    • Comparison Sorting 比较式排序
      • Bubble Sort 冒泡排序
      • Selection Sort 选择排序
      • Insertion Sort 插入排序
      • Shell Sort 希尔排序
      • Merge Sort 归并排序
      • Quck Sort 快速排序
    • Bucket Sort 桶排序
    • Counting Sort 计数排序
    • Radix Sort 基数排序

    堆数据结构

    图 算法

    动态编程

    • 计算 Fibonacci 数 ( java 版本演示)

    其它…

    (全文完)

    2011二月22

    Session存储位置

    ASP.NET 评论关闭

    SessionID是由服务器随机产生的一个由24个字符组成的字符串,请求时连同SessionId值发给服务器,以让服务器识别客户。它可存放在客户端Cookie中,另外还可以存放在URL中,方法是在Web.config file中,将sessionState中的cookieless 属性设定为true,这样就避免了某些浏览器不支持Cookie的情况,例如低端的手机浏览器。

    Session内容存放在服务器中,
    ASP.NET session有三种存储方式:
    InProc:存放在进程中。
    StateServer 存放在独立的服务中。
    SQLServer 存放在SqlServer数据库

    参考:

    http://msdn.microsoft.com/zh-tw/windowsmobile/system.web.sessionstate.httpsessionstate.sessionid(VS.80).aspx

    2010十一月29

    查询

    NHibernate 评论关闭

    1)CRUD操作:
    using (ISession session = NHibernateHelper.OpenSession())
    using (ITransaction transaction = session.BeginTransaction())
    {
    session.Update(product); //session.Save(product);session.Delete(product); 或者_session.SaveOrUpdate(c);
    transaction.Commit();
    }

    在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Criteria Query)、(根据示例查询(QBE,Query By Example)是条件查询的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。

    2)简单查询–条件查询Criteria Query

    • 据关键字查询:session.Get<Product>(productId);
    • 据其它属性查询
    • 返回一个值:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq(“Name”, name)).UniqueResult<Product>();
    • 返回一个集合:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq(“Name”, name)).List<Product>();
    • 除了用Eq外,还可用like,between等

    3)SQL语句–HQL查询

    • From子句: return _session.CreateQuery(“from Customer”) .List<Customer>();
    • select 子句 :
      
    • return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname").List<object[]>();
      
    • where子句:return _session.CreateQuery(“from Customer c where c.Firstname=’YJing’”) .List<Customer>();
      注:显示的名字为实体名而不是表名
    •   order by子句:return _session.CreateQuery("from Customer c order by c.Firstname asc,c.Lastname desc").List<Customer>();
    • group by子句:
        return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname").List<object[]>();
    • 参数传递:
       return _session.CreateQuery("from Customer c where c.Firstname=:fn").SetString("fn", firstname).List<Customer>();
    2010十一月19

    DataSource可获得的数据源

    ASP.NET 评论关闭
    DataSource对下列数据源有效
    
        * DataTable
        * DataView
        * DataSet
        * DataViewManager
        * 任何实现 IListSource 接口的组件
        * 任何实现 IList 接口的组件:可利用此特性进行每条记录数据的对象封装
    
    如: list.Add(new Product {id = 1, name = "Melon", price = 12});
            list.Add(new Product {id = 2,name = "Pear", price = 13});
            list.Add(new Product {id = 3,name = "Milk", price = 14});
            list.Add(new Product {id = 4,name = "Coca Cola", price = 15});
            list.Add(new Product {id = 5,name = "Pepsi Cola", price = 16});
            gv.DataSource = list;
            gv.DataBind();
    
    2010十一月19

    数据库操作类Session说明

    NHibernate 评论关闭

    1,连接数据库:
    var configuration = new Configuration();
    configuration.Configure(); //自动探索hibernate.cfg.xml或web.config中的nhibernate
    configuration.AddAssembly(typeof(Product).Assembly); //指定加载哪个程序集,若不写,则默认加载工程本身
    2, 连接完数据库后创建Session: _sessionFactory = configuration.BuildSessionFactory(); SessionFactory.OpenSession();
    3,利用Session完之后,因是延迟加载,需用 _Session.Flush(); 提交更新,或者待Session销毁时自动提交,如:
    using (ISession session = NHibernateHelper.OpenSession())
    {
    session.Save(user);
    }