在asp.net中怎么实现拼音码查询

来源:互联网 发布:知我药妆是正品吗 编辑:程序博客网 时间:2024/04/28 19:57

这个可以得到拼音  
  由于一个公司的OA上用到速查编码,必须得到每个字的首字母,便于以后的查询(如:开发部,则为KFB),到网上找到了一些资料,是一个存储过程。    
  存储过程为:  
  CREATE     proc   LOG_FindCode  
  @strName   nvarchar(20),    
  @strFindCode   nvarchar(20)   output  
  as    
  begin    
  declare   @word   nchar(1),@PY   nvarchar(4000)    
  set   @PY=''    
  while   len(@strName)>0    
  begin    
  set   @word=left(@strName,1)    
  set   @PY=@PY+(case   when   unicode(@word)   between   19968   and   19968+20901    
  then   (select   top   1   PY   from   (    
  select   'A'   as   PY,N'驁'   as   word    
  union   all   select   'B',N'簿'    
  union   all   select   'C',N'錯'    
  union   all   select   'D',N'鵽'    
  union   all   select   'E',N'樲'    
  union   all   select   'F',N'鰒'    
  union   all   select   'G',N'腂'    
  union   all   select   'H',N'夻'    
  union   all   select   'J',N'攈'    
  union   all   select   'K',N'穒'    
  union   all   select   'L',N'鱳'    
  union   all   select   'M',N'旀'    
  union   all   select   'N',N'桛'    
  union   all   select   'O',N'漚'    
  union   all   select   'P',N'曝'    
  union   all   select   'Q',N'囕'    
  union   all   select   'R',N'鶸'    
  union   all   select   'S',N'蜶'    
  union   all   select   'T',N'籜'    
  union   all   select   'W',N'鶩'    
  union   all   select   'X',N'鑂'    
  union   all   select   'Y',N'韻'    
  union   all   select   'Z',N'咗'    
  )   T    
  where   word>=@word   collate   Chinese_PRC_CS_AS_KS_WS    
  order   by   PY   ASC)   else   @word   end)    
  set   @strName=right(@strName,len(@strName)-1)    
  end    
  set   @strFindCode=@PY    
  end  
   
  下面是把汉语传入,调用存储过程得到速查编码的方法  
   
  public   string   GetPY(string   Name)//得到速查编码  
      {  
        SqlCommand   cmd=new   SqlCommand();  
        cmd.CommandType=CommandType.StoredProcedure;//类型为存储过程  
        cmd.CommandText="LOG_FindCode";//已经创建好的存储过程名  
        cmd.Connection=con;  
        con.Open();  
        SqlParameter   parName=new   SqlParameter();  
        parName.ParameterName="@strName";  
        parName.SqlDbType=SqlDbType.NVarChar;  
        parName.Size=20;  
        parName.Value=Name;  
   
        SqlParameter   parMsg=new   SqlParameter();  
        parMsg.ParameterName="@strFindCode";  
        parMsg.Direction=ParameterDirection.Output;  
        parMsg.SqlDbType=SqlDbType.NVarChar;  
        parMsg.Size=50;  
        cmd.Parameters.Add(parName);  
        cmd.Parameters.Add(parMsg);  
   
        cmd.ExecuteReader();  
        string   strFindCode=parMsg.Value.ToString();  
        con.Close();  
        return   strFindCode;  
      }   

 

程序代码中定义一个公共转换的方法就行了:::)  
  public   static   string   GetPinYin(string   str1)  
  {  
  string   str2="";  
  byte[]   array   =   new   byte   [2];  
  for(int   i=0;i<str1.Length;i++)    
  {  
  array   =   System.Text.Encoding.Default.GetBytes(str1[i].ToString());  
  int   aa=array[0];  
   
  if(array[0]>=176   &&   array[0]<=215)     //一级汉字  
  {  
                 
  if   (str1[i].ToString   ().CompareTo   ("匝")>=0)  
  str2   +=   "z";  
  else   if   (str1[i].ToString   ().CompareTo   ("压")>=0)  
  str2   +=   "y";  
  else   if   (str1[i].ToString   ().CompareTo   ("西")>=0)  
  str2   +=   "x";  
  else   if   (str1[i].ToString   ().CompareTo   ("挖")>=0)  
  str2   +=   "w";  
  else   if   (str1[i].ToString   ().CompareTo   ("塌")>=0)  
  str2   +=   "t";  
  else   if   (str1[i].ToString   ().CompareTo   ("撒")>=0)  
  str2   +=   "s";  
  else   if   (str1[i].ToString   ().CompareTo   ("然")>=0)  
  str2   +=   "r";  
  else   if   (str1[i].ToString   ().CompareTo   ("期")>=0)  
  str2   +=   "q";  
  else   if   (str1[i].ToString   ().CompareTo   ("啪")>=0)  
  str2   +=   "p";  
  else   if   (str1[i].ToString   ().CompareTo   ("哦")>=0)  
  str2   +=   "o";  
  else   if   (str1[i].ToString   ().CompareTo   ("拿")>=0)  
  str2   +=   "n";  
  else   if   (str1[i].ToString   ().CompareTo   ("妈")>=0)  
  str2   +=   "m";  
  else   if   (str1[i].ToString   ().CompareTo   ("垃")>=0)  
  str2   +=   "l";  
  else   if   (str1[i].ToString   ().CompareTo   ("喀")>=0)  
  str2   +=   "k";  
  else   if   (str1[i].ToString   ().CompareTo   ("击")>=0)  
  str2   +=   "j";  
  else   if   (str1[i].ToString   ().CompareTo   ("哈")>=0)  
  str2   +=   "h";  
  else   if   (str1[i].ToString   ().CompareTo   ("噶")>=0)  
  str2   +=   "g";  
  else   if   (str1[i].ToString   ().CompareTo   ("发")>=0)  
  str2   +=   "f";  
  else   if   (str1[i].ToString   ().CompareTo   ("蛾")>=0)            
  str2   +=   "e";  
  else   if   (str1[i].ToString   ().CompareTo   ("搭")>=0)          
  str2   +=   "d";  
  else   if   (str1[i].ToString   ().CompareTo   ("擦")>=0)        
  str2   +=   "c";  
  else   if   (str1[i].ToString   ().CompareTo   ("芭")>=0)        
  str2   +=   "b";  
  else   if   (str1[i].ToString   ().CompareTo   ("啊")>=0)        
  str2   +=   "a";  
  }  
  else   if(array[0]>=97   &&   array[0]<=122)  
  {//小写  
  str2+=str1[i].ToString();  
  }  
  else   if(array[0]>=65   &&   array[0]<=90)  
  {//大写  
  str2+=str1[i].ToString();  
  }  
  else   if(array[0]>=215)         //二级汉字  
  {  
  //str2   +=   ls_second_eng.Substring   (ls_second_ch.IndexOf   (str1[i].ToString   (),0),1);  
   
  if   (str1[i].ToString   ().CompareTo   ("匝")>=0)  
  str2   +=   "z";  
  else   if   (str1[i].ToString   ().CompareTo   ("压")>=0)  
  str2   +=   "y";  
  else   if   (str1[i].ToString   ().CompareTo   ("西")>=0)  
  str2   +=   "x";  
  else   if   (str1[i].ToString   ().CompareTo   ("挖")>=0)  
  str2   +=   "w";  
  else   if   (str1[i].ToString   ().CompareTo   ("塌")>=0)  
  str2   +=   "t";  
  else   if   (str1[i].ToString   ().CompareTo   ("撒")>=0)  
  str2   +=   "s";  
  else   if   (str1[i].ToString   ().CompareTo   ("然")>=0)  
  str2   +=   "r";  
  else   if   (str1[i].ToString   ().CompareTo   ("期")>=0)  
  str2   +=   "q";  
  else   if   (str1[i].ToString   ().CompareTo   ("啪")>=0)  
  str2   +=   "p";  
  else   if   (str1[i].ToString   ().CompareTo   ("哦")>=0)  
  str2   +=   "o";  
  else   if   (str1[i].ToString   ().CompareTo   ("拿")>=0)  
  str2   +=   "n";  
  else   if   (str1[i].ToString   ().CompareTo   ("妈")>=0)  
  str2   +=   "m";  
  else   if   (str1[i].ToString   ().CompareTo   ("垃")>=0)  
  str2   +=   "l";  
  else   if   (str1[i].ToString   ().CompareTo   ("喀")>=0)  
  str2   +=   "k";  
  else   if   (str1[i].ToString   ().CompareTo   ("击")>=0)  
  str2   +=   "j";  
  else   if   (str1[i].ToString   ().CompareTo   ("哈")>=0)  
  str2   +=   "h";  
  else   if   (str1[i].ToString   ().CompareTo   ("噶")>=0)  
  str2   +=   "g";  
  else   if   (str1[i].ToString   ().CompareTo   ("发")>=0)  
  str2   +=   "f";  
  else   if   (str1[i].ToString   ().CompareTo   ("蛾")>=0)            
  str2   +=   "e";  
  else   if   (str1[i].ToString   ().CompareTo   ("搭")>=0)          
  str2   +=   "d";  
  else   if   (str1[i].ToString   ().CompareTo   ("擦")>=0)        
  str2   +=   "c";  
  else   if   (str1[i].ToString   ().CompareTo   ("芭")>=0)        
  str2   +=   "b";  
  else   if   (str1[i].ToString   ().CompareTo   ("啊")>=0)        
  str2   +=   "a";  
  }  
  }  
  return   str2.ToUpper();  
   
  }