• 做项目的一点收获之二


    写注册表

            程序中要求有个开机自动运行的备选功能,在网上查了查,大概有三种方法实现开机自动运行:开始菜单中的“启动”组,Windows服务,写注册表。我选择了写注册表,代码如下:

    if (this.checkBox1.Checked==true)
                    
    {
                        RegistryKey Reg 
    = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
                        
    string sFilePath = Application.ExecutablePath;
                        Reg.SetValue(
    "DBExchanger",sFilePath);                
                    }

                    
    else 
                    
    {
                        RegistryKey Reg 
    = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
                        Reg.DeleteValue(
    "DBExchanger",true);
                    }

    使用委托

            因为不能够向线程传递参数(可以定义一个类,准备好线程要使用的数据,然后把该类的方法传递给线程委托),也不会返回值,因此要想从线程返回值,可以使用委托。委托使用方法见C#中的代理(Delegate)

    检测网络

            程序要求在连接数据库之前要先检测网络是否连通,所以这里又用到了基于套接字的编程。

    public bool CheckNet(string netid,int port)
            
    {
                
    bool flag=true
                
    string ip= netid.ToString();
              IPAddress myIP 
    = IPAddress.Parse(ip);

              
    //根据给定的IP地址字符串,处理IPAddress实例
               try
              
    {
                 EndPoint ep
    =new IPEndPoint(myIP,port);
                 Socket sock
    =new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
                 sock.Connect(ep);
                 
    if (sock.Connected)
                 
    {
                     flag
    =true;
                 }

              }
         
              
    catch
              
    {
                 flag
    =false;
              }

                
    return flag;
            }


     

    最小化到系统托盘

            设置窗体的SizeChanged事件,如下 :

    private void Form1_SizeChanged(object sender, System.EventArgs e)
            
    {
                
    if (this.WindowState==System.Windows.Forms.FormWindowState.Minimized)
                
    {
                    
    this.Hide();
                    
    this.notifyIcon1.Visible=true;
                }


            }


     

    MySql参数化查询

            这个项目针对的是MySql数据库,以前没有用过,所以在写参数化查询语句还是像写SQL Server和Access参数化查询语句时一样,例如一条查询语句:

    cmmd.CommandText="Update TableName Set Name=@Name,Data=@Data Where ID=@ID";
    cmmd.Parameters.Add(
    "@"+ClmName[0],MySql.Data.MySqlClient.MySqlDbType.String);
    cmmd.Parameters[
    0].Value = "Peter"
    cmmd.Parameters.Add(
    "@"+ClmName[1],MySql.Data.MySqlClient.MySqlDbType.LongBlob);
    cmmd.Parameters[
    1].Value = ByteArrayData;
    cmmd.Parameters.Add(MySql.Data.MySqlClient.MySqlDbType.Int32);
    cmmd.Parameters[
    0].Value = "20051102"


     

            但就是怎么都更新不了,也没有错误信息,后来经人指点才知道,原来MySql的参数占位符是"?",我把cmmd.CommandText中的"@"改成"?"后就可以了。

           

  • 相关阅读:
    Openjudge-NOI题库-简单算术表达式求值
    洛谷-求同构数的个数-NOIP2013提高组复赛
    洛谷-拼数-NOIP1998提高组复赛
    洛谷-统计数字-NOIP2007提高组复赛
    洛谷-谁拿了最多奖学金-NOIP2005提高组复赛
    Openjudge-NOI题库-字符串移位包含问题
    洛谷-乘积最大-NOIP2000提高组复赛
    NOIP2015-普及组复赛-第一题-金币
    Tyvj-超级书架
    Openjudge-NOI题库-出书最多
  • 原文地址:https://www.cnblogs.com/supersand/p/266600.html
Copyright © 2020-2023  润新知