C#操作数据库的常用公共方法!

    即便是一个小型的C#+数据库的项目(本文以SQL SERVER为例,其他数据库类似),也需要多种对数据库的操作。有时候编代码的时候,想到哪写到哪确实可以实现具体的功能,但从整个框架体系上来看,代码的冗余以及不规范,很有可能导致代码运行的效率,对后期扩展项目的规模也是有弊而无利。以前我犯了很都这种错误,以后坚决不犯了。

    好了,言归正传了。经常操作数据库的步骤无非就是连接数据库,执行SQL语句,显示结果三个大步骤。而一般这三个步骤可以由两个方面进行(个人感觉是这样):一个方法就是建立SqlDataAdapter用以填充数据集DataSet;另一个方法就是利用Commd对象执行SQL语句,然后建立SqlDataReader。前者主要用于绑定显示控件,后者则倾向于判断某种条件。总之,大体的操作流程就是这样,当我们进行多次操作数据库的时候,必然会有重复的代码,那么建立公共方法就是很必要的了。

建立一个公共类,如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace BaseClass
{
    class BaseOperate
    {

        
        //连接数据库
        public SqlConnection getcon()
        {
            string M_str_sqlcon = "Server=.;DataBase=db_CRM;Trusted_Connection=SSPI";
            SqlConnection myCon = new SqlConnection(M_str_sqlcon);
            return myCon;
        }
        

       //连接SqlConnection,执行SQL
        public void getcom(string M_str_sqlstr)
        {
            SqlConnection sqlcon = this.getcon();
            sqlcon.Open();
            SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon);
            sqlcom.ExecuteNonQuery();
            sqlcom.Dispose();
            sqlcon.Close();
            sqlcon.Dispose();
        }
        

        //创建DataSet对象
        public DataSet getds(string M_str_sqlstr, string M_str_table)
        {
            SqlConnection sqlcon = this.getcon();
            SqlDataAdapter sqlda = new SqlDataAdapter(M_str_sqlstr, sqlcon);
            DataSet myds = new DataSet();
            sqlda.Fill(myds, M_str_table);
            return myds;
        }
        

        //创建SqlDataReader对象
        public SqlDataReader getread(string M_str_sqlstr)
        {
            SqlConnection sqlcon = this.getcon();
            SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon);
            sqlcon.Open();
            SqlDataReader sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
            return sqlread;
        }
        
    }
}

    将每一个步骤像如上一样写成公共方法,则就能随意的在各个模块进行调用,这不仅使得代码简洁明了,也有助于旁人阅读。另外,对变量的命名也需要有自己的命名规则,不然当变量很都得时候就会搞混。

    有了上面的铺垫,可以按照上面的思路继续考虑可能用到的公共方法,其中,控件(比如下拉框)的数据绑定,正则表达式的判定算是最常用的,乘胜追击,立刻再写一个公共类,添加如下公共方法:

   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using System.Text.RegularExpressions;





namespace BaseClass
{
   
    class OperateAndValidate
    {
        BaseOperate boperate = new BaseOperate();// 声明BaseOperate类的一个对象,以调用其方法
        //绑定COMBOBOX控件
        public void cboxBind(string P_str_sqlstr, string P_str_table, string P_str_tbMember, ComboBox cbox)
        {
            DataSet myds = boperate.getds(P_str_sqlstr, P_str_table);
            cbox.DataSource = myds.Tables[P_str_table];//将数据集中的表绑定到下拉框上
            cbox.DisplayMember = P_str_tbMember;//将表中的具体的列所对应的值显示在下拉框中
        }
        

        //验证输入的字符串为数字
        public bool validateNum(string P_str_num)
        {
            return Regex.IsMatch(P_str_num, "^[0-9]*$");
        }
         //验证输入的字符串为电话号码
        public bool validatePhone(string P_str_phone)
        {
            return Regex.IsMatch(P_str_phone, @"\d{3,4}-\d{7,8}");
        }
         //验证输入的字符串为传真号码
        public bool validateFax(string P_str_fax)
        {
            return Regex.IsMatch(P_str_fax, @"86-\d{2,3}-\d{7,8}");
        }
        

        //验证输入的字符串为邮编号码
        public bool validatePostCode(string P_str_postcode)
        {
            return Regex.IsMatch(P_str_postcode, @"\d{6}");
        }
        #endregion

        //验证输入的字符串为E-MAIL地址
        public bool validateEmail(string P_str_email)
        {
            return Regex.IsMatch(P_str_email, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        }
        

        //验证输入的字符串为网络地址
        public bool validateNAddress(string P_str_naddress)
        {
            return Regex.IsMatch(P_str_naddress, @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
        }
        

        //自动编号
        /// <summary>
        /// 自动编号
        /// </summary>
        /// <param name="P_str_sqlstr">SQL语句</param>
        /// <param name="P_str_table">数据表</param>
        /// <param name="P_str_tbColumn">数据表字段</param>
        /// <param name="P_str_codeIndex">编号前的字符串</param>
        /// <param name="P_str_codeNum">编号后的数字</param>
        /// <param name="txt">textBox控件名</param>
        public void autoNum(string P_str_sqlstr, string P_str_table, string P_str_tbColumn, string P_str_codeIndex, string P_str_codeNum, TextBox txt)
        {
            string P_str_Code = "";
            int P_int_Code = 0;
            DataSet myds = boperate.getds(P_str_sqlstr, P_str_table);
            if (myds.Tables[0].Rows.Count == 0)
            {
                txt.Text = P_str_codeIndex + P_str_codeNum;
            }
            else
            {
                P_str_Code = Convert.ToString(myds.Tables[0].Rows[myds.Tables[0].Rows.Count - 1][P_str_tbColumn]);//获取最后一行数据里的编号字段
                P_int_Code = Convert.ToInt32(P_str_Code.Substring(1, 3)) + 1;//我的字段为"C101,C102....."
                P_str_Code = P_str_codeIndex + P_int_Code.ToString();
                txt.Text = P_str_Code;
            }
        }
        

       }
}


在自动编号的公共方法里,提取字符串的格式各有不同,由于不知道有什么方法可以实现自增,只能用C101来进行自增(要是设置为C001要的话,按照上述方法,第二个就是C2了),这方法也就将就着能用吧。

C#公交查询\BusTable\Bus\bin\Debug\Bus.dll ..........\........\...\...\.....\Bus.pdb ..........\........\...\Bus.cs ..........\........\...\bus.csproj ..........\........\...\BusDB.cs ..........\........\...\LocalStation.cs ..........\........\...\Location.cs ..........\........\...\obj\Debug\bus.csproj.FileListAbsolute.txt ..........\........\...\...\.....\bus.csprojResolveAssemblyReference.cache ..........\........\...\...\.....\Bus.dll ..........\........\...\...\.....\Bus.pdb ..........\........\...\...\.....\DesignTimeResolveAssemblyReferencesInput.cache ..........\........\...\...\.....\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs ..........\........\...\...\.....\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs ..........\........\...\...\.....\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs ..........\........\...\Properties\AssemblyInfo.cs ..........\........\...\Station.cs ..........\........\...Table\AdminWindow.xaml ..........\........\........\AdminWindow.xaml.cs ..........\........\........\App.config ..........\........\........\App.xaml ..........\........\........\App.xaml.cs ..........\........\........\bin\Debug\Bus.dll ..........\........\........\...\.....\bus.mdb ..........\........\........\...\.....\Bus.pdb ..........\........\........\...\.....\BusTable.exe ..........\........\........\...\.....\BusTable.exe.config ..........\........\........\...\.....\BusTable.pdb ..........\........\........\...\.....\BusTable.vshost.exe ..........\........\........\...\.....\BusTable.vshost.exe.config ..........\........\........\...\.....\BusTable.vshost.exe.manifest ..........\........\........\bus.mdb ..........\........\........\BusTable.csproj ..........\........\........\MainWindow.xaml ..........\........\........\MainWindow.xaml.cs ..........\........\........\obj\Debug\AdminWindow.baml ..........\........\........\...\.....\AdminWindow.g.cs ..........\........\........\...\.....\AdminWindow.g.i.cs ..........\........\........\...\.....\App.g.cs ..........\........\........\...\.....\App.g.i.cs ..........\........\........\...\.....\BusTable.csproj.FileListAbsolute.txt ..........\........\........\...\.....\BusTable.csproj.GenerateResource.Cache ..........\........\........\...\.....\BusTable.csprojResolveAssemblyReference.cache ..........\........\........\...\.....\BusTable.exe ..........\........\........\...\.....\BusTable.g.resources ..........\........\........\...\.....\BusTable.pdb ..........\........\........\...\.....\BusTable.Properties.Resources.resources ..........\........\........\...\.....\BusTable_Content.g.cs ..........\........\........\...\.....\BusTable_Content.g.i.cs ..........\........\........\...\.....\BusTable_MarkupCompile.cache ..........\........\........\...\.....\BusTable_MarkupCompile.i.cache ..........\........\........\...\.....\DesignTimeResolveAssemblyReferencesInput.cache ..........\........\........\...\.....\MainWindow.baml ..........\........\........\...\.....\MainWindow.g.cs ..........\........\........\...\.....\MainWindow.g.i.cs ..........\........\........\...\.....\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs ..........\........\........\...\.....\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs ..........\........\........\...\.....\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs ..........\........\........\...\.....\....PE\Properties.Resources.Designer.cs.dll ..........\........\........\...\.....\WindowStation.baml ..........\........\........\...\.....\WindowStation.g.cs ..........\........\........\...\.....\WindowStation.g.i.cs ..........\........\........\...\.....\WindowUpdate.baml ..........\........\........\...\.....\WindowUpdate.g.cs ..........\........\........\...\.....\WindowUpdate.g.i.cs ..........\........\........\Properties\AssemblyInfo.cs ..........\........\........\..........\Resources.Designer.cs ..........\........\........\..........\Resources.resx ..........\........\........\..........\Settings.Designer.cs ..........\........\........\..........\Settings.settings ..........\........\........\RollBook.v11.suo ..........\........\........\WindowStation.xaml ..........\........\........\WindowStation.xaml.cs ..........\........\........\WindowUpdate.xaml ..........\........\........\WindowUpdate.xaml.cs ..........\........\BusTable.sln ..........\........\BusTable.suo ..........\........\BusTable.v11.suo ..........\........\...\obj\Debug\TempPE ..........\........\...Table\obj\Debug\TempPE ..........\........\...\bin\Debug ..........\........\...\obj\Debug ..........\........\...Table\bin\Debug ..........\........\........\...\Release ..........\........\........\obj\Debug ..........\........\...\bin ..........\........\...\obj ..........\........\...\Properties ..........\........\...Table\bin ..........\........\........\obj ..........\........\........\Properties ..........\........\Bus ..........\........\BusTable ..........\BusTable
----------Database-------------- 1.DataTable帮助类(DataTableHelper.cs) 2.Access数据库文件操作辅助类(JetAccessUtil.cs) 5.查询条件组合辅助类(SearchCondition.cs) 6.查询信息实体类(SearchInfo.cs) 8.Sql命令操作函数(可用于安装程序的时候数据库脚本执行)(SqlScriptHelper.cs) ----------Device-------------- 声音播放辅助类(AudioHelper.cs) 摄像头操作辅助类,包括开启、关闭、抓图、设置等功能(Camera.cs) 提供用于操作【剪切板】的方法(ClipboardHelper.cs) 获取电脑信息(Computer.cs) 提供用户硬件唯一信息的辅助类(FingerprintHelper.cs) 读取指定盘符的硬盘序列号(HardwareInfoHelper.cs) 提供访问键盘当前状态的属性(KeyboardHelper.cs) 全局键盘钩子。这可以用来在全球范围内捕捉键盘输入。(KeyboardHook.cs) 模拟鼠标点 击(MouseHelper.cs) 全局鼠标钩子。这可以用来在全球范围内捕获鼠标输入。(MouseHook.cs) MP3文件播放操作辅助类(MP3Helper.cs) 关联文件(ExtensionAttachUtil.cs) 注册文件关联的辅助类(FileAssociationsHelper.cs) 打开、保存文件对话框操作辅助类(FileDialogHelper.cs) 常用的文件操作辅助类FileUtil(FileUtil.cs) INI文件操作辅助类(INIFileUtil.cs) 独立存储操作辅助类(IsolatedStorageHelper.cs) 序列号操作辅助类(Serializer.cs) 获取一个对象,它提供用于访问经常引用的目录的属性。(SpecialDirectories.cs) 简单的Word操作对象(WordCombineUtil.cs) 这个类提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) XML操作类(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。(ArgumentValidation.cs) 这个类提供了实用方法的字节数组和图像之间的转换。(ByteImageConvertor.cs) byte字节数组操作辅助类(BytesTools.cs) 处理数据类型转换,数制转换、编码转换相关的类(ConvertHelper.cs) CRC校验辅助类(CRCUtils.cs) 枚举操作公共类(EnumHelper.cs) 身份证操作辅助类(IDCardHelper.cs) 检测字符编码的类(IdentifyEncoding.cs) RGB颜色操作辅助类(MyColors.cs) 日期操作类(MyDateTime.cs) 转换人民币大小金额辅助类(RMBUtil.cs) 常用的字符串常量(StringConstants.cs) 简要说明TextHelper。(StringUtil.cs) 获取中文字首字拼写,随机发生器,按指定概率随机执行操作(Util.cs) 各种输入格式验证辅助类(ValidateUtil.cs) ----------Network-------------- Cookie操作辅助类(CookieManger.cs) FTP操作辅助类(FTPHelper.cs) HTML操作类(HttpHelper.cs) 网页抓取帮助(HttpWebRequestHelper.cs) Net(NetworkUtil.cs) IE代理设置辅助类(ProxyHelper.cs) ----------Winform-------------- 跨线程的控件安全访问方式(CallCtrlWithThreadSafety.cs) CheckBoxList(CheckBoxListUtil.cs) 窗口管理类(ChildWinManagement.cs) 由马丁·米勒http://msdn.microsoft.com/en-us/library/ms996492.aspx提供一个简单的方法打印工作的一个RichTextBox一个帮手(ExRichTextBoxPrintHelper.cs) 显示,隐藏或关闭动画形式。(FormAnimator.cs) 对窗体进行冻结、解冻操作辅助类(FreezeWindowUtil.cs) 窗体全屏操作辅助类(Ful
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值