致力于技术进步

专注于编程艺术

博客园 首页 新随笔 联系 订阅 管理
有幸发现了Anthem.NET这个东东,真是Server Control的一大创举,stand up for open source code seriously,而且是老外的,国人明显落后,大都为了利益,唉,国人应该向老外学习!
 
开发数据库安装应用程序 
现在的项目大都与数据库打交道,为了方便客户,要求在部署项目时提供数据库安装应用程序,下面的Code是本人反编译某个项目的数据库安装应用程序(net),相信根据这个示例写出java的代码不是难事! 
     void CreateDatabase() 
     { 
            (代码略) //获取关键参数值,主要是(SQL服务器名称,用户名称, 密码,数据库名称,源数据库文件,目标数据库路径),要注意程序的控制这些变量值-非空! 
              关键代码: 
               try 
                { 
                    string connectionString = "server=" + SQL服务器名称 + ";user id=" + 用户 + ";password=" + 密码 + ";"; 
                    SqlConnection connection = new SqlConnection(connectionString); 
                    connection.Open(); 
                    SqlDataReader reader = null; 
                    SqlCommand command = new SqlCommand("sp_helpdb", connection); 
                    command.CommandType = CommandType.StoredProcedure; 
                    reader = command.ExecuteReader(); 
                    for (int i = 0; i < reader.FieldCount; i++) 
                    { 
                        if (reader.Read() && (reader["name"].ToString() == 数据库名称)) 
                        { 
                            MessageBox.Show("数据库 " + 数据库名称+ " 已经存在!"); 
                            this.txtDbIp.Focus(); 
                            this.cmdCreate.Enabled = true; 
                            this.cmdExit.Enabled = true; 
                            return; 
                        } 
                    } 
                    command = null; 
                    connection.Close(); 
                    if (str6.Substring(str6.Length - 1) != @"\") 
                    { 
                        str6 = str6 + @"\"; 
                    } 
                    string strSql = "restore database " +数据库名称+ " from disk = '" + 源数据库文件 + "' with move 'WHPortDB_Data' to  '" + 目标数据库路径 + 数据库名称 + "_Data', move 'WHPortDB_Log' to  '" + 目标数据库路径 +数据库名称+ "_log', replace"; (注意:'WHPortDB_Data 'WHPortDB_Log这两个文件是备份数据库产生的文件,实际要根据不用的数据库而改变,我编译安装程序的被这卡了一下, ) 
                    this.DBExecute(connection, strSql); 
                        //定义代码( 
                         void DBExecute(SqlConnection connection, string strSql) 
                        { 
                             try 
                                { 
                                     connection.Open(); 
                                     new SqlCommand(strSql, connection).ExecuteNonQuery(); 
                                     connection.Close(); 
                                } 
                             catch (Exception ex) 
                                { 
                                            throw new Exception("数据库打开错误。详细:错误发生在" + ex.Source + "的" + ex.Message + "处。"); 
                                } 
                        } 

                       //可作出友好提示 messagebox,alert等 
                   } 
                   catch 
                   {//异常处理} 
     } 

使用Jmail组件发送邮件 

◆ 在Asp中使用Jmail,直接使用 Server.CreateObject("Jmail.Message")就可以了 
◆ 在.net环境中,需要进行设置 
    1.安装jmail4.3 
2.找到jmail.dll(Program Files\Dimac\w3JMail4下) 
3.执行Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin\ildasm.exe(可使用Visual Studio .Net 2005 命令提示), 
格式如下:tlbimp c:\Program Files\Dimac\w3JMail4\jmail.dll /out:myJmail.dll /namespace:myJmail 
生成myJmail.dll后,copy到web的根目录的bin目录。在ASP.Net页面中,用这个方法引用: 

Jmail.aspx 
<%@ Page Language="C#" C%> 
<%@ Import Namespace="myJmail" %> 

<script runat="server"> 
          protected void Page_Load(Object Src, EventArgs E) 
          { 
                Message jmail=new Message(); 
                jmail.From="sss"; 
                jmail.AddRecipient("closetome521@sina.com",null,null);//收件人 
                jmail.MailServerUserName="brookes"; 
                jmail.MailServerPassWord="walkor"; 
                jmail.Subject="jmail c#"; 
                jmail.Send("mail.lsg.com",false);//发送内容 
          } 
</script> 

Tlbimp: 
Microsoft .Net Framework Type Library to Assembly Converter 

send的意义 
真悲哀,一天到晚写这样的代码Button_Click(Object sender, EventArgs e) 还不知道,这发送者send的意义是什么?到底有什么用?今天在网上查了下这么说的 
  这个Sender 就是我们在这个事件中处理触发这个事件的对象的时候用的。就是说这个 
Sender 就是被Click 的button    看个示例: 

<input type="submit" id="a1" value="一"  runat="server"> 
<input type="submit" id="a2" value="二"  runat="server"> 
<input type="submit" id="a3" value="三"  runat="server"> 
<input type="submit" id="a4" value="四"  runat="server"> 
这是四个Submit 按钮,他们激发的事件是同一个事件,怎么来区分呢? 看下面的Code 
public void Submit_Click(Object sender, EventArgs E) 

switch (((Control)sender).ID) 

case "a1":showmsg.Text=""哈哈一; break; 
case "a2" :showmsg.Text=""哈哈二; break; 
case "a3" :showmsg.Text=""哈哈三; break; 
case "a4" :showmsg.Text=""哈哈四; break; 


</script> 
<asp:Label id=showmsg runat=server /> 
代码本身没有什么意思,但是却说明了一个问题,也许这就是这篇文章的意义所在吧 


C#.NET使用TTS语音引擎实现中英文真人朗读 

本文讲述使用微软TTS5.1语音引擎(中文)实现文本阅读和音频输出为WAV完美解决方案. 
网上很多文章说的是要安装SAPI.51 SDK,而这个东西有好几十M,并且用起来比较复杂。微软官方网站上是这样写的:SAPI5.1 SDK可以从微软网站下载:http://www.microsoft.com/speech/download/sdk51/ 需要安装程序的有Speech SDK 5.1(68M)和5.1 Language Pack (81.5M)。本文使用不到2M的东西实现文语转换,可以说是有关TTS的完美版本!功能: 
进行中文文本的阅读,可以将阅读的语音输出为WAV音频。 
实现平台: 
Microsoft Visual Studio 2005 
微软TTS5.1语音引擎(中文) 
所需要的东西: 
用TlbImp从SAPI.51 SDK中导出的DotNetSpeech.dll(160K) 
微软TTS5.1语音引擎(中文).msi(1.55M) 

以上两个东西由于大小关系没有传上来,需要的可以留下邮箱地址。 

如果你自己安装了SAPI.51 SDK,可以使用这个命令自己导出DotNetSpeech.dll 
Tlbimp sapi.dll /out: DotNetSpeech.dll(出现错误不用管,不影响使用) 
安装微软TTS5.1语音引擎(中文).msi,打开"控制面板",打开"语音"配置项目,在"文字-语音转换"的"语音选择"组合框中选择"Microsoft Simplified Chinese",这样才可以读出中文。如果要读英文,要选择"Microsoft Sam"。 
使用Microsoft Visual Studio 2005新建项目,添加引用,引用DotNetSpeech.dll。 
命名空间: 
using DotNetSpeech; 
读出文本框中的中文: 
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; 
SpVoice voice = new SpVoice(); 
voice.Speak(textBox1.Text, spFlags); 
将文本框中中文的读音保存为WAV文件: 
SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync; 
SpVoice voice = new SpVoice(); 
SaveFileDialog dialog = new SaveFileDialog(); 
dialog.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav"; 
dialog.Title = "保存WAV文件"; 
dialog.FilterIndex = 2; 
dialog.RestoreDirectory = true; 
if (dialog.ShowDialog() == DialogResult.OK) 

SpeechStreamFileMode spFileMode = SpeechStreamFileMode.SSFMCreateForWrite; 
SpFileStream spFileStream = new SpFileStream(); 
spFileStream.Open(dialog.FileName, spFileMode, false); 
voice.AudioOutputStream = spFileStream; 
voice.Speak(textBox1.Text, spFlags); 
voice.WaitUntilDone(1000); 
上面两句一定要写上,否则产生的文件没有声音 
WaitUntilDone的后面的smTimeout是一个int型 
spFileStream.Close(); 
   
使用C#如何实现Word文档的合并 
类和方法说明,Merge(string strOrgDoc, string[] arrCopies, string strOutDoc)方法实现参见 
http://www.codeproject.com/office/mswmergecs.asp 
public class DocMerger 
  { 
    /// <summary> 
    /// Merge a document with a set of copies 
    /// </summary> 
    /// <param name="strOrgDoc"> 
    /// Original file name 
    /// </param> 
    /// <param name="arrCopies"> 
    /// File names of the modified files 
    /// </param> 
    /// <param name="strOutDoc"> 
    /// The result filename 
    /// </param> 
    public void Merge(string strOrgDoc, string[] arrCopies, string strOutDoc) 
    {    } 
    /// <summary> 
    /// Merge a document with a set of copies 
    /// </summary> 
    /// <param name="strOrgDoc"> 
    /// Original file name 
    /// </param> 
    /// <param name="strCopyFolder"> 
    /// Folder in which the copies are located 
    /// </param> 
    /// <param name="strOutDoc"> 
    /// The result filename 
    /// </param> 
    public void Merge(string strOrgDoc, string strCopyFolder, string strOutDoc) 
    { 
      string[] arrFiles = Directory.GetFiles(strCopyFolder); 
      Merge(strOrgDoc, arrFiles, strOutDoc); 
    } 
  } 

打开新窗口(JS),老掉牙的东西,直接拷贝省时间的 
<script language =javascript> 
             function WinOpen(url,width,height) 
             { 
                  var x=(screen.availWidth -width)/2; 
                  var y=(screen.availHeight-height)/2; 
                  msg=window.open(url,"NewWindow","toolbar=no,directories=no,menubar=no,width="+width+"px,height="+height+"x,left="+x+"px,top="+y+"px"); 
                  //msg.moveTo(x,y); 
                  msg.document.write("<HEAD><TITLE>HELLO!</TITLE></HEAD>"); 
                  msg.document.title="新窗口"; 
                  msg.document.bgColor="#d7d9ae"; 
                  msg.document.write("<BODY SCROLL=AUTO><CENTER><H1>你好</H1><H2>这是<B>JavaScript</B>所开的窗口</H2></CENTER>"); 
                  msg.document.write("<br/><br/><br/><br/><br/><br/><br/><br/><hr color='yellow' size=8><br/><br/><center><font color='red'><a href='javascript:window.close();'>关闭</a></font></center></BODY>"); 
             } 
        </script>
posted on 2007-09-17 08:20  stephen&amp;#183;周  阅读(373)  评论(0)    收藏  举报