做项目的一点收获之二

写注册表

        程序中要求有个开机自动运行的备选功能,在网上查了查,大概有三种方法实现开机自动运行:开始菜单中的“启动”组,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中的"@"改成"?"后就可以了。

       

原文地址:https://www.cnblogs.com/supersand/p/266600.html