第一个问题:关于汉字转换为拼音的问题,到这里去看一下很详细的。http://expert.csdn.net/Expert/topic/1716/1716926.xml?temp=.6597406第二个问题:
这个就更简单了,只要对数据库执行SELECT语句SELECT text FROM table1 WHERE spell = ?前提是这个表中已建立了两个字段:拼音和相应的汉字字串。
要注意的是返回的结果可能不只一个。

解决方案 »

  1.   

    需要调用拼音字库文件。我有一个PB的例子,还没时间翻译成C#。不过我想对你也会有帮助的。如果你需要我的拼音字库可以把邮箱留给我!我帮你写也行!
    //*****************************************************************************
    //
    //   Function : F_Create_PYZT
    //
    //    Purpose : 生成字符串的拼音字头
    //
    //       Date : January 6, 2001
    //
    //  Arguments : string chinese_string  - 待提取拼音字头的字符串
    //              string phone_file      - 拼音字库文件名 
    //
    //    Returns : string result - 字符串的拼音字头;发生错误,返回空串
    //
    //    Written : 高宪锋
    //
    //        Log :
    //
    //             DATE        WHO           WHAT
    //            ------      -----     -------------------------------------
    //
    //*****************************************************************************
    STRING string_read,return_string,mid_str
    STRING char_min
    LONG start_pos,mid_pos,end_pos
    INT f_number
    LONG line_len,file_lenf_number=FileOpen(phone_file,LineMode!,Read!,Shared!)IF f_number=-1 THEN  RETURN ""END IFFileRead(f_number,string_read)
    line_len=Len(string_read)+2file_len=FileLength(phone_file)
    file_len=file_len/line_len+1end_pos=file_len
    start_pos=0mid_str=Trim(chinese_string)IF Match(mid_str,"^[a-zA-Z]+$") THEN  Return Upper(Left(mid_str,8))END IFDO WHILE Trim(mid_str)<>""  IF Asc(mid_str)<=160 THEN    If (Left(mid_str,1)>='a' AND Left(mid_str,1)<='z') OR &
             (Left(mid_str,1)>='A' AND Left(mid_str,1)<='Z') Then
          return_string=return_string+Left(mid_str,1)
        End If
          return_string=Trim(return_string)
          mid_str=Right(mid_str,Len(mid_str) - 1)  ELSE    char_min=Left(mid_str,2)    DO WHILE (start_pos+1) < end_pos
          mid_pos=Int((start_pos+end_pos)/2)
          FileSeek(f_number,(mid_pos - 1)*line_len,FromBeginning!)
          IF FileRead(f_number,string_read)=-1 THEN
            EXIT
          END IF
          IF Left(string_read,2)<char_min THEN
            start_pos=mid_pos
          ELSEIF Left(string_read,2)=char_min THEN
            start_pos=end_pos
          ELSE
            end_pos=mid_pos
          END IF
        LOOP    mid_str=Right(mid_str,Len(mid_str) - 2)
        return_string=return_string+Left(Trim(Right(string_read,line_len - 4)),1)  END IF  end_pos=file_len
      start_pos=0LOOPIF Trim(mid_str)<>"" THEN  RETURN ""END IFreturn_string=Trim(Upper(Left(return_string,8)))IF FileClose(f_number)=-1 THEN  RETURN ""END IFRETURN return_string  //返回拼音字头
      

  2.   

    用API的话,有好多的限制,不如自己去写一个函数方便。这是我个人的观点!:)