服务端管理工具编写(二)——公共函数及配置文件读写

在编写工具前,先弄个配置文件,保存一些基本信息,同时要编写一部分公共函数,如数据库连接和读取等,这些函数是所有数据库操作的基础,用得很多,把他们编译成一个单独的DLL文件比较合算。

一、配置文件

配置文件其实就只要保存一点信息,就是IIS的目录,这样通过IIS目录就可以找到数据库的本地绝对路径了。

在MeetingManage工程文件夹里依次打开MeetingManage->bin->Debug文件夹,是不是发现编写的出来的程序可执行文件就在这里?好,在这里新建一个文本文档,把它改名为Config.xml,注意,是要把扩展名为xml,用记事本或其他文本编辑器打开,输入配置内容。

Config.xml内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<AppConfig>
    <IISPath>D:\DocumentsVSWork\MeetingSys\MeetingSys</IISPath>
</AppConfig>

IISPath里面内容根据实际填写,就是MeetingSys工程的里面的文件夹的本地绝对路径。

二、公共函数

因为要把公共函数单独编译成一个DLL文件,需要新建一个项目,在IDE的“解决方案资源管理器”里面的“解决方案MeetingManage”那里用鼠标右键单击,在弹出菜单中选择添加->新建项目,在弹出的窗口中,模板选择windows,目标选择类库,把名称改为MeetingData,当然,也可以用其它名字,这个是DLL的命名空间,以后引用要用到这个名字,自己记住就行了。做完这个操作后,解决方案里面就有两个项目了,一个是MeetingData,一个是MeetingManage,前者就是公共函数,后者是管理工具的主体。

在解决方案资源管理器中打开MeetingData项目,看到到Class.cs的文件,为方便记忆,把它改名为MdbData.cs,不改也可以没影响的,双击打开这个文件,先添加几个引用,这个是C#的基本操作,以后不再讲了,因为用到不同的系统函数,随时会添加的。

添加引用就是添加几个using项目,在cs的最顶端,系统已经默认添加了3个了,由于公共函数中涉及到xml文件操作和数据操作,所以添加几个需要引用的文件。代码如下

using System.Xml;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
在using ×××下方有个namespace ×××的,这个就是命名空间,上文已经讲到,这里不多讲,在命名空间下方有行public class ×××,这个就是类,把它改名为public class MdbData,把数据库所有公共函数都编写在这个类里面。

先来个读取XML文档,获取数据库地址的函数。这个函数就是读取上文讲到的配置文件的里面保存的数据库地址,注意,这里其实是读取出IIS的目录,不能直接使用的。

public static string sIISPath() //读取XML文档,获取数据库地址
        {
            XmlDocument xXmlDoc = new XmlDocument();
            try
            {
                string sPath = "";
                xXmlDoc.Load(@"Config.xml");
                sPath = xXmlDoc.SelectSingleNode(@"/AppConfig/IISPath").InnerText;
                return sPath;
            }
            catch
            {
                return null;
            }
        }
上述代码简单讲解一下,先定义一个XmlDocument变量xXmlDoc用于操作,给xXmlDoc加载同一下目录下的Config.xml文件,这里有点要说明的是字符串前面加了了个@,表示字符串里面的"/"等作为字符使用,不进行转义,这个以后会用到很多的。xXmlDoc.SelectSingleNode是读取指定节点里面的内容。关于XML文档读取需要深入研究的请百度。

IIS目录读取出来后,就需要数据连接了,因此在弄个数据库连接的函数。

public static OleDbConnection DataConn() //连接数据库,返回OleDB连接对象
        {
            if (sIISPath() != null)
            {
                string strCon = @" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + sIISPath() + @"\App_Data\MeetingData.mdb";
                OleDbConnection myConn = new OleDbConnection(strCon);
                return myConn;
            }
            else
                return null;

        }
这里注意要和MeetingSys项目配合,在定义连接字符串时对数据库地址进行了补齐,就是最后添加的@"\App_Data\MeetingData.mdb"是进行地址补全的。

连接好数据库后就开始进行数据读写操作了,先弄个根据SQL指令获取数据库内容的,一般都是以表的形式返回,所以就弄个返回数据表的。

public static DataTable GetDataTable(string SQLComm)//根据SQL指令获取数据表
        {
            OleDbConnection oConn = DataConn();
            oConn.Open();
            OleDbCommand Cmd = oConn.CreateCommand();
            Cmd.CommandText = SQLComm;
            DataSet DS = new DataSet();
            OleDbDataAdapter adapter = new OleDbDataAdapter(Cmd);
            adapter.Fill(DS);
            DataTable DT = DS.Tables[0];
            oConn.Close();
            return DT;
        }
注意,这个函数没有对数据库连接是否成功进行检验,项目赶时间,我懒得写了,将就使用。还有可以返回DataSet的,也懒得写的,因为我用DataTable比较多。

有时候需要执行指定的SQL指令才操作数据库,所以弄个函数比较适合。

public static int SQLCom(string sqlStr)//在数据库中执行指定SQL语句,返回影响行数。
        {
            OleDbConnection oConn = DataConn();
            oConn.Open();
            OleDbCommand Cmd = new OleDbCommand();
            Cmd.CommandText = sqlStr;
            Cmd.Connection = oConn;
            int SQLComCount = Cmd.ExecuteNonQuery();
            Cmd.Clone();
            oConn.Close();
            return SQLComCount;
        }
系统用用得最多的是根据某个指定的ID,读取唯一一条记录的某个字段内容,如根据会议室ID读取会议室的名称,所以弄个通用的函数很有必要。

public static string GetAny(string TableName, string FieldName, string IDName, string ID)//在数据库中指定表具备唯一ID记录中获取指定字段内容
        {
            string Site_Str = "Select " + FieldName + " From " + TableName + " Where " + IDName + "=" + ID;
            DataTable DT = GetDataTable(Site_Str);
            string str = "";
            if (DT != null)
            {
                str = DT.Rows[0][FieldName].ToString();
            }
            return str.Trim();
        }
这个函数用了4个参数,第一个是数据库的表名,第二个是要获取数据的字段名,第三个是具有唯一性的ID的字段名,第四个就是这个ID的值。
数据操作很多都是更新数据或插入数据,每次写这些SQL指令都很头痛,尤其是字段多的时候,弄个方便记忆的生成函数比较爽一点。

生成更新指令的函数如下

public static string SQLUpdate(string sTableName, string[] sField, string[] sValue, string sCondition)//根据条件,生成update的SQL指令
        {
            string SQLStr = "";
            SQLStr = "Update " + sTableName + " set ";
            if (sField.Length == sValue.Length)
            {
                for (int i = 0; i < sField.Length; i++)
                {
                    SQLStr += sField[i] + "=" + sValue[i] + ",";
                }
            }
            else
                SQLStr = "";
            SQLStr = SQLStr.Substring(0, SQLStr.Length - 1);
            SQLStr += " where " + sCondition;
            return SQLStr;
        }
这里用了4个变量,第一个是表名,表示需要操作的表,第二、三个标量都是字符串数组,前者是需要更新的字段名,后者是对应值,最后一个是筛选的条件。注意这只是生成SQL指令,不会执行的,需要执行要配合SQLCom函数。

生成插入指令的函数如下

public static string SQLInsert(string sTableName, string[] sField, string[] sValue)//根据条件,生成Insert的SQL指令
        {
            string SQLStr = "";
            SQLStr = "Insert Into  " + sTableName + " ( ";
            if (sField.Length == sValue.Length)
            {
                for (int i = 0; i < sField.Length; i++)
                {
                    SQLStr += sField[i] + ",";
                }
                SQLStr = SQLStr.Substring(0, SQLStr.Length - 1) + ") Values(";
                for (int i = 0; i < sField.Length; i++)
                {
                    SQLStr += sValue[i] + ",";
                }
                SQLStr = SQLStr.Substring(0, SQLStr.Length - 1) + ")";
            }
            else
                SQLStr = "";
            return SQLStr;
        }
和更新的指令差不多,少了个筛选条件而已。
公共函数和配置文件读写基本就这些内容了,如果后面还有需要的在添加或修改。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值