建立一個項目,不妨取名爲MainPro,做爲主程序,切換到代碼窗口,看到以下一段代碼:
///
/// 應用程序的主入口點。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
web
private static string m_UserName,m_Password;
///
/// 應用程序的主入口點。
///
[STAThread]
static void Main(string[] args)
{
if(args.Length==2)//有參數輸入,你還能夠根據實際狀況傳入更多參數
{
//記錄下用戶名和密碼,供軟件使用
m_UserName=args[0];
m_Password=args[1];
Application.Run(new Form1());
}
else
{
MessageBox.Show("不能從這裏啓動");
}
}
數據庫
private void Form1_Load(object sender, System.EventArgs e)
{
string msg=string.Format("用戶名:{0},密碼:{1}",m_UserName,m_Password);
MessageBox.Show(msg);
編程
操做員表
|
版本表
|
||||
字段名
|
類型
|
用途
|
字段名
|
類型
|
用途
|
序號
|
長整型
|
主鍵
|
序號
|
長整型
|
主鍵
|
姓名
|
字符
|
用戶名
|
版本號
|
長整型
|
存放當前版本
|
文件名稱
|
字符
|
本記錄對應的文件名
|
|||
密碼
|
字符
|
密碼
|
文件內容
|
OLE 對象,SQL 中爲Image
|
存放文件的具體內容
|
private void btnBrow_Click(object sender, System.EventArgs e)
{
OpenFileDialog myForm=new OpenFileDialog();
myForm.Filter="應用程序(*.exe)|*.exe|全部程序(*.*)|*.*";
if(myForm.ShowDialog()==DialogResult.OK)
{
this.txtFileName.Text=myForm.FileName;
}
}
服務器
private void btnCancel_Click(object sender, System.EventArgs e)
{
this.Close();
}
網絡
using System.Data.OleDb;
using System.IO;
ide
private DataSet m_DataSet=new DataSet();
private string m_TableName="版本";
函數
///
/// 從一個含有路徑的文件名中分離出文件名
///
/// 包含路徑的文件名
/// 去掉路徑的文件名
private string GetFileNameFromPath(string p_Path)
{
string strResult="";
int nStart=p_Path.LastIndexOf("\\");
if(nStart>0)
{
strResult=p_Path.Substring(nStart+1,p_Path.Length-nStart-1);
}
return strResult;
}
工具
private void btnOK_Click(object sender, System.EventArgs e)
{
//檢查版本號是否合法
try
{
Decimal.Parse(this.txtVersion.Text);
}
catch
{
MessageBox.Show("無效的版本號!");
this.txtVersion.Focus();
this.txtVersion.SelectAll();
return;
}
if(this.txtFileName.Text.Trim().Length>0)
{
//檢查文件是否存在
if(!File.Exists(this.txtFileName.Text.Trim()))
{
MessageBox.Show("文件不存在!");
return;
}
//鏈接數據庫
string strConnection="Provider = Microsoft.Jet.OLEDB.4.0 ;Jet OLEDB:Database Password=;Data Source ="+
Application.StartupPath.ToString().Trim()+"\\mydatabase.mdb" ;
OleDbConnection myConnect=new OleDbConnection(strConnection);
OleDbCommand myCommand=new OleDbCommand("select * from 版本",myConnect);
OleDbDataAdapter myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
OleDbCommandBuilder myCommandBuilder=new OleDbCommandBuilder(myDataAdapter);
myConnect.Open();
//獲取已有的數據
m_DataSet=new DataSet();
try
{
myDataAdapter.Fill(m_DataSet,this.m_TableName);
//若是是首次上傳,則增長一條記錄
if(m_DataSet.Tables[m_TableName].Rows.Count==0)
{
DataRow newrow=m_DataSet.Tables[m_TableName].NewRow();
newrow["序號"]="1";
m_DataSet.Tables[m_TableName].Rows.Add(newrow);
}
DataRow row=m_DataSet.Tables[m_TableName].Rows[0];
//填入去掉路徑的文件名稱
row["文件名稱"]=this.GetFileNameFromPath(this.txtFileName.Text.Trim());
//填入版本號
row["版本號"]=this.txtVersion.Text.Trim();
//將實際文件存入記錄中
FileStream fs=new FileStream(this.txtFileName.Text.Trim(),FileMode.Open);
byte [] myData = new Byte [fs.Length ];
fs.Position = 0;
fs.Read (myData,0,Convert.ToInt32 (fs.Length ));
row["文件內容"] = myData;
fs.Close();//關閉文件
//更新數據庫
myDataAdapter.Update(this.m_DataSet,this.m_TableName);
myConnect.Close();
MessageBox.Show("文件更新成功!");
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
}
else
{
MessageBox.Show("請輸入文件名");
}
}
ui
using System.Data.OleDb;
using System.Threading;
using System.IO;
using Microsoft.Win32;
this
///
/// 存放操做員及密碼的DataSet
///
private DataSet m_DataSet;
///
/// 本功能用到的數據庫表
///
private string m_TableName="操做員";
private DataTable m_Table;
///
/// 定義本軟件在註冊表中software下的公司名和軟件名稱
///
private string m_companyname="lqjt",m_softwarename="autologin";
///
/// 從註冊表中讀信息;
///
/// 要讀取的鍵值
/// 讀到的鍵值字符串,若是失敗(如註冊表尚無信息),則返回""
private string ReadInfo(string p_KeyName)
{
RegistryKey SoftwareKey=Registry.LocalMachine.OpenSubKey("Software",true);
RegistryKey CompanyKey=SoftwareKey.OpenSubKey(m_companyname);
string strValue="";
if(CompanyKey==null)
return "";
RegistryKey SoftwareNameKey=CompanyKey.OpenSubKey(m_softwarename);//創建
if(SoftwareNameKey==null)
return "";
try
{
strValue=SoftwareNameKey.GetValue(p_KeyName).ToString().Trim();
}
catch
{}
if(strValue==null)
strValue="";
return strValue;
}
///
/// 將信息寫入註冊表
///
/// 鍵名
/// 鍵值
private void WriteInfo(string p_keyname,string p_keyvalue)
{
RegistryKey SoftwareKey=Registry.LocalMachine.OpenSubKey("Software",true);
RegistryKey CompanyKey=SoftwareKey.CreateSubKey(m_companyname);
RegistryKey SoftwareNameKey=CompanyKey.CreateSubKey(m_softwarename);
//寫入相應信息
SoftwareNameKey.SetValue(p_keyname,p_keyvalue);
}
///
/// 獲取操做員狀況,同時更新主程序版本
///
private void GetInfo()
{
this.m_DataSet=new DataSet();
this.combUsers.Items.Clear();
string strSql=string.Format("SELECT * FROM 操做員 ORDER BY 姓名");
//鏈接數據庫
string strConnection="Provider = Microsoft.Jet.OLEDB.4.0 ;Jet OLEDB:Database Password=;Data Source ="+
Application.StartupPath.ToString().Trim()+"\\mydatabase.mdb" ;
OleDbConnection myConnect=new OleDbConnection(strConnection);
OleDbCommand myCommand=new OleDbCommand(strSql,myConnect);
OleDbDataAdapter myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
try
{
myConnect.Open();
//獲取操做員信息
myDataAdapter.Fill(this.m_DataSet,this.m_TableName);
//將查詢到的用戶名填充到組合框供用戶選擇
this.m_Table=this.m_DataSet.Tables[this.m_TableName];
foreach(DataRow row in m_DataSet.Tables[m_TableName].Rows)
{
this.combUsers.Items.Add(row["姓名"]).ToString().Trim();
}
//檢查是否有新的版本
DataSet dataset=new DataSet();
string tablename="tablename";
//爲減小數據傳送時間,不獲取文件內容
strSql="select 文件名稱,版本號 from 版本";
myCommand=new OleDbCommand(strSql,myConnect);
myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
myDataAdapter.Fill(dataset,tablename);
if(dataset.Tables[tablename].Rows.Count==1)//有文件
{
string filename=dataset.Tables[tablename].Rows[0]["文件名稱"].ToString();
string version=dataset.Tables[tablename].Rows[0]["版本號"].ToString();
//讀入本機主程序的版本號
string oldversion=this.ReadInfo(filename);
if(oldversion.Length==0)//不存在
oldversion="0";
if(Decimal.Parse(version)>Decimal.Parse(oldversion))//有新的版本出現
{
//取回文件內容
dataset=new DataSet();
strSql="select * from 版本";
myCommand=new OleDbCommand(strSql,myConnect);
myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
myDataAdapter.Fill(dataset,tablename);
//將文件下載到本地
DataRow row=dataset.Tables[tablename].Rows[0];
if(row["文件內容"]!=DBNull.Value)
{
Byte[] byteBLOBData = new Byte[0];
byteBLOBData = (Byte[])row["文件內容"];
try
{
FileStream fs=new FileStream(Application.StartupPath+"\\"+filename,FileMode.OpenOrCreate);
fs.Write(byteBLOBData,0,byteBLOBData.Length);
fs.Close();
//寫入當前版本號,供下次使用
this.WriteInfo(filename,version);
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
}
}//有新版本
}//有文件
//關閉鏈接
myConnect.Close();
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
return;
}
//容許登陸
this.btnOK.Enabled=true;
private void Form1_Load(object sender, System.EventArgs e)
{
//爲加快顯示速度,將數據庫鏈接等放到另一個線程中去
Thread thread=new Thread(new ThreadStart(GetInfo));
thread.Start();
}
private void btnOK_Click(object sender, System.EventArgs e)
{
//根據組合框的選擇,獲得當前用戶在DataSet中具體物理位置
if(this.combUsers.SelectedIndex<0)//沒有選擇
return;
DataRow rowNow=null;
foreach(DataRow row in this.m_DataSet.Tables[this.m_TableName].Rows)
{
if(row["姓名"].ToString().Trim()==this.combUsers.Text.Trim())
{
rowNow=row;
break;
}
}
if(rowNow==null)
return;
//獲取當前正確密碼
string strPassword=rowNow["密碼"].ToString().Trim();
this.txtPassword.Text=this.txtPassword.Text.Trim();
if(this.txtPassword.Text==strPassword)//密碼正確
{
//主程序名稱
string filename=Application.StartupPath+"\\"+"MainPro.exe";
//參數名稱
string arg=this.combUsers.Text+" "+this.txtPassword.Text;
//運行主程序
System.Diagnostics.Process fun=System.Diagnostics.Process.Start(filename,arg);
//關閉登陸框
this.Close();
}
else
{
MessageBox.Show(" 密碼錯誤!若是你確信密碼輸入正確,\n能夠試着檢查一下大寫字母鍵是否按下去了。",
"警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
this.txtPassword.Focus();
this.txtPassword.SelectAll();
}
}
private void btnCancel_Click(object sender, System.EventArgs e)
{
this.Close();
///
///預編譯選項,若是定義了NETWORKVERSION,,表示是網絡版,使用SQL2000數據庫,不然,使用ACCESS2000數據庫
///
//#define NETWORKVERSION
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;
using System.Data;
#if NETWORKVERSION
using System.Data.SqlClient;
#else
using System.Data.OleDb;
#endif
using System.Reflection;
using Microsoft.Win32;
namespace OA
{
public class Tool
{
public Tool()
{
}
///
/// 主程序的文件名
///
public const string FileName="OA.exe";
public const string g_TitleName="麗汽集團辦公自動化系統";
public static string g_UserName;
public static void WriteInfo(string p_keyname,string p_keyvalue)
{
......
}
//其餘相似代碼略......
}
}
///
///預編譯選項,若是定義了NETWORKVERSION,,表示是網絡版,使用SQL2000數據庫,不然,使用ACCESS2000數據庫
///
//#define NETWORKVERSION
///
/// 根據SQL語句返回一個查詢結果,主要用於只要求返回一個字段的一個結果的狀況
///
/// 查詢用到的SQL語句
/// 查詢到的結果,沒有時則返回空""
public static string GetAValue(string p_Sql)
{
string strResult="";
Tool.OpenConn();
//設計所須要返回的數據集的內容
try
{
// 打開指向數據庫鏈接
#if NETWORKVERSION //網絡版
SqlCommand aCommand = new SqlCommand ( p_Sql ,m_Connect ) ;
SqlDataReader aReader = aCommand.ExecuteReader ( ) ;
#else //單機版,注意變量名aCommand和aReader在兩個版本中都是同樣的,有利於編程
OleDbCommand aCommand = new OleDbCommand ( p_Sql ,m_Connect ) ;
OleDbDataReader aReader = aCommand.ExecuteReader ( ) ;
#endif
// 返回須要的數據集內容這裏就不分單機版仍是網絡版了,反正變量名同樣
if(aReader.Read())
strResult=aReader[0].ToString();
aReader.Close () ;
}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
return strResult;
}