1.本程序的使用的语言是C#,数据库是Access2003。主要是对员工信息进行简单的增删改查操作和对.ini配置文件的读写操作。

2.代码运行效果如下:





功能比较简单。其中在得到查询结果后,在查询结果界面上最上面的一行数字好像是根据数据库的列数自动获取到的,我本想把它删掉来着,但是没成功。

3.代码实现

点击查看代码。clsDbOperate类--主要是数据库连接和员工的增删改查操作。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace UserInfoManage
{
public class clsDbOperate {
static string exePath = System.Environment.CurrentDirectory + "\\Data\\";//数据库在本程序中所在路径
static string Psd = "PTC8800"; OleDbConnection conn = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=" + exePath + "SystemData.mdb;" + "Jet OLEDB:Database Password=" + Psd);
OleDbCommand oleCommand = new OleDbCommand();//操作查询 private OleDbDataReader ole_reader = null;
private DataTable dt = null; public DataTable dtSelectResult(string sql) {
DataTable dt = new DataTable(); //新建表对象
try {
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn); //创建适配对象
da.Fill(dt); //用适配对象填充表对象
conn.Close();
} catch (Exception) {
} finally {
conn.Close();
}
return dt;
}
public int intSelectResultCount(string sql) {
DataSet ds = new DataSet(); //新建表对象
int n = 0;
try {
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn); //创建适配对象 da.Fill(ds); //用适配对象填充表对象
n = ds.Tables[0].Rows.Count;
} catch (Exception) {
} finally {
conn.Close();
}
return n;
}
public int Del_Ins_Upd_Result(string sql) {
int n = 0;
try {
conn.Open();
//增
//string sql = "insert into 表名(字段1,字段2,字段3,字段4)values(...)";
//删
//string sql = "delete from 表名 where ="...;
//改
//string sql = "update student set 字段1=" ...;
OleDbCommand comm = new OleDbCommand(sql, conn);
n = comm.ExecuteNonQuery();//执行sql语句
} catch (Exception ex) {
MessageBox.Show(ex.Message);
} finally {
conn.Close();
}
conn.Close();
return n;
}
/// <summary>
/// 从数据库里面获取数据
/// </summary>
///<param name="strSql">查询语句
/// <returns>数据列表</returns>
public DataTable GetDataTableFromDB(string strSql) {
if (exePath == null) {
return null;
}
try {
conn.Open();//打开连接
if (conn.State == ConnectionState.Closed) {
return null;
}
oleCommand.CommandText = strSql;
oleCommand.Connection = conn;
ole_reader = oleCommand.ExecuteReader(CommandBehavior.Default);
dt = ConvertOleDbReaderToDataTable(ref ole_reader);
ole_reader.Close();
ole_reader.Dispose();
} catch (System.Exception e) {
//Console.WriteLine(e.ToString());
MessageBox.Show(e.Message);
} finally {
if (conn.State != ConnectionState.Closed) {
conn.Close();
}
}
return dt;
}
/// <summary>
/// 转换数据格式
/// </summary>
///<param name="reader">数据源
/// <returns>数据列表</returns>
private DataTable ConvertOleDbReaderToDataTable(ref OleDbDataReader reader) {
DataTable dtTab = null;
DataRow dr = null;
int dataColumnCount = 0;
int i = 0;
dataColumnCount = reader.FieldCount;
dtTab = BuildAndInitDataTable(dataColumnCount);
dtTab.Rows.Add("序号", "工号", "姓名", "密码", "是否管理员", "登录次数");
if (dtTab == null) {
return null;
}
while (reader.Read()) {
dr = dtTab.NewRow(); for (i = 0; i < dataColumnCount; ++i) {
dr[i] = reader[i];
}
dtTab.Rows.Add(dr);
}
return dtTab;
}
/// <summary>
/// 创建并初始化数据列表
/// </summary>
///<param name="fieldCount">列的个数
/// <returns>数据列表</returns>
private DataTable BuildAndInitDataTable(int fieldCount) {
DataTable dtTab = null;
DataColumn dc = null;
int i = 0;
if (fieldCount <= 0) {
return null;
}
dtTab = new DataTable();
for (i = 0; i < fieldCount; ++i) {
dc = new DataColumn(i.ToString());
dtTab.Columns.Add(dc);
}
return dtTab;
}
}
}
点击查看代码。FileOperation类--.ini配置文件的操作类。主要是对FileConfig.ini文件进行读写操作
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging; namespace UserInfoManage
{
public class FileOperation {
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="section">节点名称[如[TypeName]]</param>
/// <param name="key">键</param>
/// <param name="val">值</param>
/// <param name="filepath">文件路径</param>
/// <returns></returns>
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath);
/// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="def">值</param>
/// <param name="retval">stringbulider对象</param>
/// <param name="size">字节大小</param>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);
private string strSec = ""; //INI文件名 public string ReadFile(string strFilePath, string FieldName) {
string returnName = null;
if (File.Exists(strFilePath))//读取时先要判读INI文件是否存在
{
//strSec = Path.GetFileNameWithoutExtension(strFilePath);
strSec = "Information";
returnName = ContentValue(strFilePath, strSec, FieldName);
} else {
//MessageBox.Show("INI文件不存在");
}
return returnName;
} public int WriteFile(string strFilePath, string FieldName, string FieldValue) {
int ret = 0;
try {
//根据INI文件名设置要写入INI文件的节点名称
//此处的节点名称完全可以根据实际需要进行配置
//strSec = Path.GetFileNameWithoutExtension(strFilePath); //获取INI文件的节点名称
strSec = "Information";
WritePrivateProfileString(strSec, FieldName, FieldValue.Trim(), strFilePath);
ret = -1;
//MessageBox.Show("写入成功");
} catch (Exception) {
}
return ret;
} private string ContentValue(string strFilePath, string Section, string key) //自定义函数
{
StringBuilder temp = new StringBuilder(1024);
GetPrivateProfileString(Section, key, "", temp, 1024, strFilePath);
//对应定义的读取函数,返回值
return temp.ToString();
}
}
}
点击查看代码。FrmUserManager类--界面类。主要是对用户的信息进行操作
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UserInfoManage;
using UserInfoManage.from;
using System.Runtime.InteropServices; namespace UserInfoManage {
public partial class FrmUserManager : Form {
private clsDbOperate dbOperate;
private FileOperation fileOperation;
private string strUserId;
private string strUserName;
private string strPassword;
private string strFilePath = Application.StartupPath + @"\FileConfig.ini";//定义INI文件的路径 public FrmUserManager() {
InitializeComponent();
}
private void FrmUserManager_Load(object sender, EventArgs e) {
dbOperate = new clsDbOperate();
RefreshUserInfo();
dgvUserInfo.AllowUserToAddRows = false;
dgvUserInfo.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//设置为整行被选中
dgvUserInfo.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
dgvUserInfo.BackgroundColor = Color.White;
dgvUserInfo.ReadOnly = true;
dgvUserInfo.Columns[0].HeaderText = "序号";
dgvUserInfo.Columns[1].HeaderText = "工号";
dgvUserInfo.Columns[2].HeaderText = "姓名";
dgvUserInfo.Columns[3].HeaderText = "密码";
dgvUserInfo.Columns[4].HeaderText = "是否管理员";
dgvUserInfo.Columns[5].HeaderText = "登录次数"; fileOperation = new FileOperation();
}
/// <summary>
/// 增加操作
/// </summary>
private void btnAddUserInfo_Click(object sender, EventArgs e) {
if (txtUserID.Text == "" || txtUserName.Text == "" || txtUserPsd.Text == "") {
MessageBox.Show("员工信息不完整,无法添加!带*为必填项", "提示", MessageBoxButtons.OK);
} else {
string sql = string.Empty;
string strIsAdmin = string.Empty;
strIsAdmin = chkIsAdmin.Checked == true ? "1" : "0";
try {
sql = "select UserName from userInfo where UserID='" + txtUserID.Text + "'";
if (dbOperate.intSelectResultCount(sql) > 0) {
MessageBox.Show("已存在的员工工号!", "提示", MessageBoxButtons.OK);
return;
} else {
sql = "insert into userInfo(UserID,UserName,UserPsd,IsAdmin,LoginTimes)";
sql += "Values('" + txtUserID.Text + "','" + txtUserName.Text + "','" + txtUserPsd.Text + "','" + strIsAdmin + "',0)";
if (dbOperate.Del_Ins_Upd_Result(sql) > 0) {
RefreshUserInfo();
MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK);
ClearUserInfo();
} else
MessageBox.Show("添加失败,请查找原因", "提示", MessageBoxButtons.OK);
}
} catch (Exception) {
MessageBox.Show("添加失败,请查找原因", "提示", MessageBoxButtons.OK);
}
}
}
/// <summary>
/// 修改用户信息
/// </summary>
private void btnModifyUserInfo_Click(object sender, EventArgs e) {
if (txtUserID.Text == "" || txtUserName.Text == "" || txtUserPsd.Text == "") {
MessageBox.Show("员工信息不完整,无法添加!带*为必填选项", "提示", MessageBoxButtons.OK);
} else {
string sql = string.Empty;
string strIsAdmin = string.Empty;
try {
strIsAdmin = chkIsAdmin.Checked == true ? "1" : "0";
sql = "update userInfo set UserID='" + txtUserID.Text + "',UserName='" + txtUserName.Text + "',UserPsd='" + txtUserPsd.Text + "',IsAdmin='" + strIsAdmin + "'";
sql += " where UserID='" + txtUserID.Text + "'";
if (dbOperate.Del_Ins_Upd_Result(sql) > 0) {
RefreshUserInfo();
MessageBox.Show("修改成功", "提示", MessageBoxButtons.OK);
ClearUserInfo();
} else
MessageBox.Show("修改失败,请查找原因", "提示", MessageBoxButtons.OK);
} catch (Exception) {
MessageBox.Show("修改失败,请查找原因", "提示", MessageBoxButtons.OK);
}
}
}
/// <summary>
/// 删除用户信息
/// </summary>
private void btnDelUserInfo_Click(object sender, EventArgs e) {
if (txtUserID.Text == "" || txtUserName.Text == "") {
MessageBox.Show("请选择要删除的记录", "提示", MessageBoxButtons.OK);
} else {
if (MessageBox.Show("确定要删除该员工信息吗?\n" + "员工账号:" + txtUserID.Text + "\n" + "员工姓名:" + txtUserName.Text, "删除前确认", MessageBoxButtons.YesNo) == DialogResult.Yes) {
try {
string sql = "select * from userInfo where UserID='" + txtUserID.Text + "' and UserName='" + txtUserName.Text + "'";
if (dbOperate.intSelectResultCount(sql) > 0) {
sql = "delete from UserInfo where UserID='" + txtUserID.Text + "' and UserName='" + txtUserName.Text + "'";
dbOperate.Del_Ins_Upd_Result(sql);
RefreshUserInfo();
MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK);
ClearUserInfo();
} else
MessageBox.Show("删除失败,数据库中无此员工信息", "提示", MessageBoxButtons.OK);
} catch (Exception) {
MessageBox.Show("删除失败,请查找原因", "提示", MessageBoxButtons.OK);
}
}
}
}
private void txtUserID_KeyPress(object sender, KeyPressEventArgs e) {
if (!(char.IsNumber(e.KeyChar)) && e.KeyChar != (char)8) {
e.Handled = true;
}
}
/// <summary>
/// 刷新用户信息
/// </summary>
private void RefreshUserInfo() {
string sql = "select * from userInfo";
DataTable dt = dbOperate.dtSelectResult(sql);
dgvUserInfo.DataSource = dt;
}
/// <summary>
/// 清除用户信息
/// </summary>
private void ClearUserInfo() {
txtUserID.Text = "";
txtUserName.Text = "";
txtUserPsd.Text = "";
chkIsAdmin.Checked = false;
} private void dgvUserInfo_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 3) {
if (e.Value != null && e.Value.ToString().Length > 0) {
e.Value = new string('*', e.Value.ToString().Length);
}
}
if (e.ColumnIndex == 4) {
if (e.Value.Equals("1")) {
e.Value = "是";
} else
e.Value = "否";
}
} private void dgvUserInfo_CellClick(object sender, DataGridViewCellEventArgs e) {
try {
txtUserID.Text = dgvUserInfo.Rows[e.RowIndex].Cells[1].Value.ToString();
txtUserName.Text = dgvUserInfo.Rows[e.RowIndex].Cells[2].Value.ToString();
txtUserPsd.Text = dgvUserInfo.Rows[e.RowIndex].Cells[3].Value.ToString();
chkIsAdmin.Checked = dgvUserInfo.Rows[e.RowIndex].Cells[4].Value.ToString() == "1" ? true : false;
} catch (Exception) { }
} public DataTable dt;
private void btnSelect_Click(object sender, EventArgs e) {
if(cboSelectItems.SelectedIndex == 0) {
if (txtSelectContent.Text == "") {
MessageBox.Show("请输入要查询的用户ID");
return;
} else {
/*string sql = "select * from userInfo where UserID='" + txtSelectContent.Text + "'";
dt = new DataTable();
dt = dbOperate.GetDataTableFromDB(sql);
//查询信息界面
SelectInfo selectInfo = new SelectInfo(dt);
//selectInfo.ShowDialog();
selectInfo.Show(this);*/
string sql = "select * from userInfo where UserID='" + txtSelectContent.Text + "'";
if (dbOperate.intSelectResultCount(sql) > 0) {
dt = new DataTable();
dt = dbOperate.GetDataTableFromDB(sql);
//查询信息界面
SelectInfo selectInfo = new SelectInfo(dt);
//selectInfo.ShowDialog();
selectInfo.Show(this);
} else {
MessageBox.Show("查无此人", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
} else {
if (txtSelectContent.Text == "") {
MessageBox.Show("请输入要查询的用户姓名");
return;
} else {
string sql = "select * from userInfo where UserName= '" + txtSelectContent.Text + "'";
if (dbOperate.intSelectResultCount(sql) > 0) {
dt = new DataTable();
dt = dbOperate.GetDataTableFromDB(sql);
SelectInfo selectInfo = new SelectInfo(dt);
//selectInfo.ShowDialog();
selectInfo.Show(this);
} else {
MessageBox.Show("查无此人", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
} } /// <summary>
/// 将员工信息写入FileConfig.ini配置文件
/// </summary>
private void btnWrite_Click(object sender, EventArgs e) {
if ((txtUserID.Text.Trim() != "") && (txtUserName.Text.Trim() != "") && txtUserPsd.Text.Trim() != "") {
int ret;
ret = fileOperation.WriteFile(strFilePath, "UserID", txtUserID.Text);
ret = fileOperation.WriteFile(strFilePath, "UserName", txtUserName.Text);
ret = fileOperation.WriteFile(strFilePath, "UserPsd", txtUserPsd.Text);
if (ret == -1) {
MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK);
} else {
MessageBox.Show("保存失败", "提示", MessageBoxButtons.OK);
}
} else {
MessageBox.Show("工号或姓名不能为空", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
/// <summary>
/// 将员工信息从FileConfig.ini文件中读出
/// </summary>
private void btnRead_Click(object sender, EventArgs e) {
strUserId = fileOperation.ReadFile(strFilePath, "UserID");
strUserName = fileOperation.ReadFile(strFilePath, "UserName");
strPassword = fileOperation.ReadFile(strFilePath, "UserPsd"); txtUserID.Text = strUserId;
txtUserName.Text = strUserName;
txtUserPsd.Text = strPassword;
}
}
}
点击查看代码。SelectInfo类--查询结果的界面。主要用来显示查询到的用户信息。这里根据个人需要,如果不需要重新新建一个几面来显示查询到的信息,则可以把界面里面的DataGridView放到FrmUserManager类中。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace UserInfoManage.from {
public partial class SelectInfo : Form {
private DataTable dt;
public SelectInfo(DataTable dt) {
InitializeComponent();
this.dt = dt;
} private void SelectInfo_Load(object sender, EventArgs e) {
dgvSelectInfo.DataSource = dt;
} private void dgvSelectInfo_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 3 && e.RowIndex != 0) {
if (e.Value != null && e.Value.ToString().Length > 0) {
e.Value = new string('*', e.Value.ToString().Length);
}
}
if (e.ColumnIndex == 4) {
if (e.Value.Equals("1")) {
e.Value = "是";
} else {
e.Value = "否";
}
}
}
}
}

C#+Access 员工信息管理--简单的增删改查操作和.ini配置文件的读写操作。的更多相关文章

  1. MVC3.0+knockout.js+Ajax 实现简单的增删改查

    MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...

  2. salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)

    此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...

  3. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  4. 通过JDBC进行简单的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  5. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  6. 初试KONCKOUT+WEBAPI简单实现增删改查

    初试KONCKOUT+WEBAPI简单实现增删改查 前言 konckout.js本人也是刚刚接触,也是初学,本文的目的是使用ko和asp.net mvc4 webapi来实现一个简单增删改查操作.Kn ...

  7. SpringMVC之简单的增删改查示例(SSM整合)

    本篇文章主要介绍了SpringMVC之简单的增删改查示例(SSM整合),这个例子是基于SpringMVC+Spring+Mybatis实现的.有兴趣的可以了解一下. 虽然已经在做关于SpringMVC ...

  8. python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作

    1.通过 pip 安装 pymysql 进入 cmd  输入  pip install pymysql   回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...

  9. 通过flask实现web页面简单的增删改查bootstrap美化版

    通过flask实现web页面简单的增删改查bootstrap美化版 项目目录结构 [root@node1 python]# tree -L 2 . ├── animate.css ├── fileut ...

随机推荐

  1. JavaWeb——基本概念

    1.1 web开发: web:网页 静态web: 普通的html,css 特点:数据内容不会变化 动态web: 百度等几乎所有的网站 提供:数据内容会变化 技术栈:Servlet/JSP(Java), ...

  2. kubernetes 的ingress controller 的nginx configuration配置参数

    下列列举一些参数其中常用的大家可根据实际情况自行添加(影响全局) kubectl edit cm nginx-configuration -n ingress-nginx 配置文件cm的定义: htt ...

  3. 利用MSSQL getshell

    此次复现使用的sql server 2000 和sql server 2008两个环境进行的 是在已知数据库密码的基础上进行的 0x01 MSSQL连接 连接MSSQL 2000 新建连接: 填写目的 ...

  4. bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp)

    bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp) bzoj Luogu 题解时间 给两个小写字母串 $ A $ , $ B $ ,请你计算: ...

  5. mmap代替通用IO读取文件数据(curious)

    提供一份测试demo: #include <stdio.h> #include <string.h> #include <stdlib.h> #include &l ...

  6. TypeScript编译tsconfig.json配置

    配置预览 { "include": ["src/**/*"], "exclude": ["ndoe_modules", ...

  7. Java中的软引用、弱引用、虚引用的适用场景以及释放机制

    Java的强引用,软引用,弱引用,虚引用及其使用场景   从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引 ...

  8. Oracle问题解决记录

    一.前言 oracle这么一个庞大的东西,出点问题真是太常见了.开个博客,用于记录遇到的问题吧. 持续更新. 二.问题列表 归档日志满,引起的问题. 一台服务器,用了很久了,某天,出现了磁盘空间占满的 ...

  9. C# 如何让new 出来的form显示在最外层?

    /// <summary> /// 显示比对不同点的位置 /// </summary> public void showDiffImage() { //在此处弹出不一样图 Bi ...

  10. Dubbo 如何停机?

    Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才 会执行.