很简单的企业管理器---我写程序的方式,几个自定义控件。

好久没写博克了,一是工作忙,二是最近感冒了。现在终于好了一点。

园子里好像在谈论OO、命根子,我也说两句吧。命根子嘛,我觉得是竞争力,呵呵,不多说了,免得跑题。我主要想说的是我写代码的方式。

这里呢我利用我常用的东东写个实例,抛砖引玉,大家也都来批批,帮助我提高嘛。

我常用的呢是 数据访问层(简单理解是SQLHelp,但是绝不等于)、分页控件等自定义控件、UserControl等。

实例呢就是做一个很简单的“企业管理器”,等等,不要想的太远,我没想做那么大,我只想达到如下几个功能即可。

1、显示SQL里面的数据库名。
2、根据选择的数据库名显示数据库里的表名。
3、选择一个表然后以分页的方式显示数据。
4、对数据可以进行查询。(不好意思,还没完成)
5、对选择的数据可以编辑,可以添加、删除数据。(不好意思还是没有完成)。

ps:
什么?您问,还有两项没有完成就赶往外发?说实在的,代码在上个星期日就写完了,可是上不了网,就一直延误下来了。我想还是先发出来,然后再打不定吧,呵呵。如果大家都不感兴趣呢,那我也就省事了。

先发一个效果图吧。

图片是以NorhWind数据库里的Orders表为例。

环境介绍
对照环境:使用数据库作持久化的项目。
数据库:SQL2000 、SQL2005 。SQL2008 还没有安装,所以不知道是否支持
编程语言:Asp.net(C#)。B/S
代码行数:150多行(/zh/Default.aspx得后置代码,目前的功能)。
基本上没有OO,顶多也就是基于OO。其实还是面向过程的思路,代码有点乱,还没有整理。

基本上是一层的,但是也不是说没有分层。粉煤分层的就不讨论了,没有甚么意义,呵呵。

优点:
1、代码少,我觉得代码少意味着开发速度快,好维护。
2、利用一个控件来实现分页的功能,而要实现这个分页功能不需要在数据库里添加存储过程,只需要给分页控件设置几个属性就可以了。
3、分页效率高,如果谁有海量数据可以来测试一下。
4、读取SQL 里的数据库名、表名、字段名的方法。(可能您早就知道了)

不足:
不好意思分页控件的详细用法还没有写呢。明天补充。
另外是用VS2003写的,还没有升级到VS2005 。不过数据库倒是可以用SQL 2005 。
另外把代码拷到VS2005里面也是可以正常运行的吧。

下面不知道该写点什么了,先这样吧,呵呵。

对了忘记上传文件了。

http://files.cnblogs.com/jyk/ys.rar

分页控件的源码。
http://www.naturefw.com

(一开始的写错了,现已更正,多谢 “被你烧了”  提醒)

还是直接发个源码吧。

  1//实例化数据访问层
  2        DataAccessLayer dal = new DataAccessLayer();
  3        //连接master数据库
  4        DataAccessLayer dal_DB = new DataAccessLayer();
  5        
  6        控件#region 控件
  7        protected HBS.Controls.HBSTextBox Txt_SA;
  8        protected HBS.Controls.HBSTextBox Txt_PWD;
  9        protected HBS.Controls.HBSDropDownList Lst_DB;
 10        protected HBS.Controls.HBSPage Page1;
 11        protected HBS.Controls.HBSTextBox Txt_SL;
 12        protected System.Web.UI.WebControls.DataGrid DG;
 13        protected System.Web.UI.WebControls.Button Btn_Open;
 14        protected System.Web.UI.WebControls.DataList DL;
 15        #endregion
 16        
 17        private void Page_Load(object sender, System.EventArgs e)
 18        {
 19            // 在此处放置用户代码以初始化页面
 20            Response.Cache.SetNoStore();
 21            Page1.PubShowDataObject = DG;        //设置显示数据的控件,还可以是DataList、Repeater 等。
 22            if (Page.IsPostBack)
 23            {
 24                if (Lst_DB.Items.Count > 1)
 25                {
 26                    //设置分页控件的连接字符串。
 27                    string conn = GetConnString(Lst_DB.SelectedItem.Text);
 28                    Page1.PubConnString = conn ;
 29                    dal.cnString = conn;
 30                }
 31            }
 32        }
 33    
 34        打开系统数据库,以提取数据库名称的信息#region 打开系统数据库,以提取数据库名称的信息
 35        private void Btn_Open_Click(object sender, System.EventArgs e)
 36        {
 37            dal_DB.cnString = GetConnString("master");
 38
 39            //显示数据库里的表名
 40            Lst_DB.DataSource = dal_DB.RunSqlDataTable("select dbid as id,[name] as txt from sysdatabases ");
 41            Lst_DB.DataBind();
 42        }
 43        #endregion
 44
 45        根据数据库名显示数据库里的表。#region 根据数据库名显示数据库里的表。
 46        private void Lst_DB_SelectedIndexChanged(object sender, System.EventArgs e)
 47        {
 48            //根据数据库名显示数据库里的表。
 49            dal.cnString = GetConnString(Lst_DB.SelectedItem.Text);
 50
 51            //显示数据库里的表名
 52            string sql = "SELECT id, [name], xtype FROM dbo.sysobjects WHERE (xtype = 'u') AND (name <> N'dtproperties') order by [name]";
 53            DL.DataSource = dal.RunSqlDataTable(sql);
 54            DL.DataBind();
 55        }
 56        #endregion
 57    
 58        根据选择地表名设置分页控件#region 根据选择地表名设置分页控件
 59        private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
 60        {
 61            提取排序字段的信息#region 提取排序字段的信息
 62            //分页显示表里的数据
 63            string TableName = e.CommandArgument.ToString();
 64            //查找表里的主键
 65            string sql = "SELECT  top 1 tbl.name AS TableName, tbl.xtype AS TableType, col.name AS FieldName," 
 66                + " tt.name AS FieldType, col.length AS FieldLength"
 67                + " FROM dbo.syscolumns col INNER JOIN"
 68                + " dbo.sysobjects tbl ON col.id = tbl.id INNER JOIN"
 69                + " dbo.systypes tt ON col.xtype = tt.xtype"
 70                + " WHERE (tbl.name = '"+ TableName +"') order by col.colorder ";
 71        
 72            #endregion
 73 
 74            string[] str = dal.RunSqlStrings(sql);
 75            if (dal.ErrorMsg.Length >2)
 76            {
 77                Response.Write(dal.ErrorMsg);
 78                return ;
 79            }
 80
 81            if (str != null)
 82            {
 83                //设置分页控件
 84                Page1.SqlTableNames = TableName;        //表名或者视图名
 85                Page1.SqlColumns  = "*";                //显示的字段
 86                Page1.SqlOrderColumn = str[2];            //排序字段
 87                Page1.SqlOrderColumnKind = "string";    //排序字段的类型
 88                Page1.SqlPageSize  = 10;                //一页的记录数
 89                Page1.IsOrderDesc = true;                //是否倒序
 90
 91                Page1.CreateQuery() ;                    //创建SQL语句
 92                Page1.BindFirstPage();                    //绑定第一页的数据
 93            }
 94
 95        }
 96        #endregion
 97    
 98        获取连接字符串#region 获取连接字符串
 99        private string GetConnString(string DbName)
100        {
101            //处理数据库的实例名
102            string ShiLi = "";
103            if (this.Txt_SL .TextTrimNone.Length ==0)
104                ShiLi = ".";
105            else
106                ShiLi = ".\\" + this.Txt_SL.TextTrimNone;
107
108            //修改连接字符串
109            return "data source="+ ShiLi +";initial catalog="+ DbName +";persist security info=False;user id="+ this.Txt_SA.TextTrimNone +";pwd="+ this.Txt_PWD.TextTrimNone  +";";
110            
111        }
112        #endregion

时间: 2024-10-25 10:10:49

很简单的企业管理器---我写程序的方式,几个自定义控件。的相关文章

sql server 企业管理器与应用程序的连结失败

由于N久没有用sql server了,所以在对某台sql server的数据库做备份和迁移时,我选择了比较容易操作的图形化界面--企业管理器.(当然会有命令在查询分析器里操作更好)不过新装的 sql server在打开查询分析器时,跳出了一个错误,见下图: 解决方法: 开始--运行中输入regsvr32 semsfc.dll /s 回车,问题解决. 接着点击sql server组--右建新建sql server注册--下一步--在可用的服务器里,选择要连结的服务器. 添加完成后,在数据库列表里选

作业做很简单的下载器~有个问题请教一下~

问题描述 先放代码吧~先是主方法的类~packagedf;importjava.awt.Button;importjava.awt.GridBagConstraints;importjava.awt.GridBagLayout;importjava.awt.Label;importjava.awt.TextArea;importjava.awt.TextField;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListen

关于T—SQL与SQL企业管理器

      看了数据库视频,很多时候,视频中都给我们采用了两种方法去讲解.一个是SQL企业管理器,另一个就是T-SQL(Tansact-SQL).对于第一种方法,感觉很简单,有相应的图标,轻轻松松搞定每一项任务.这样就足够了吗?显然是不对的.两者还是各有千秋吧.       企业管理器是图形界面的,对于刚入门的初学者来说是个不错的工具.不过要进行专业的开发,最好还是对T-SQL多些了解比较好.专业的DBA(DatabaseAdministrator)很少使用企业管理器去管理数据库.在实际应用过程

java程序,新手帮我看看,应该很简单。

问题描述 java程序,新手帮我看看,应该很简单. 订单里有5件商品,捡货人员也捡出5件商品,请写算法核对拣货单里的商品,并适当提出出错提示. 解决方案 两个数组比较有几个共同元素?- =:是这样理解嘛 解决方案二: http://www.csdn.net/article/2015-01-15/2823577 看下这个博客 解决方案三: 订单中的5件商品做外循环,拣货员的5件做内循环,判断订单中每件商品是否在拣货员拣出的5件中,若在,则把此商品从订单和拣货的商品列表中移除. 最终,订单中剩余的是

网站优化写出高质量的软文其实很简单

如有做为一种重要的网站推广方法,受到seor的欢迎,高质量的软文不仅能带来大量流量,而且能带来大量链接,引导蜘蛛光临我们的站点,增加网站权重,因此软文推广是网站优化最好的推广方法.软文推广也是很多seor谈论最难的方法.今天冲浪就谈谈如何写出高质量的软文,其实你会发现,写出高质量的软弱竟然是如此的简单. 1.软文的话题 写软文要找自己熟悉的话题,自己擅长的话题,只有自己在该话题方面知道的多了,有独特的见解,写起来才能游刃有余,挥笔自然.在该话题内,围绕读者最关心的问题,读者心里想的问题,读者需要

err-运行后为空白,很简单的程序

问题描述 运行后为空白,很简单的程序 #include #include #include #define double B1 -2605573.350 #define double B2 3946395.001 #define double B3 4265605.723 //沈阳工业大学中央校区(基站)的三个坐标 #define ERR 1 void main() { int m; FILE *fp;//建立一个文件操作指针 fp = freopen("D:output1.txt",

sql-一道关于数据库的面试题,看着很简单,但我就是不会写。求指导

问题描述 一道关于数据库的面试题,看着很简单,但我就是不会写.求指导 解决方案 oracle的http://www.cnblogs.com/luluping/archive/2012/07/26/2610705.html 解决方案二: 这就是竖表变横表,用case语法汇总,或者用PIVOT(sqlserver方法) 解决方案三: SQL行转列汇总 解决方案四: 本人菜鸟一枚.以下是我想到的一种方法: ---行转列 create table tb( name varchar(10), subjec

c语言-C语言 这个好像很简单,但是怎写

问题描述 C语言 这个好像很简单,但是怎写 Description There are N stones in a circle, numbered from 0 to N-1. And there are k coins on the kth stone (For example, there are two coins on the stone with number 1). Now, Lasercat wants to collect as many coins as he can. Ho

java请进,本人小白,这个很简单程序看不懂,单击事件。请帮我讲解一下,就是用AIDE开发的呜呜

问题描述 java请进,本人小白,这个很简单程序看不懂,单击事件.请帮我讲解一下,就是用AIDE开发的呜呜 解决方案 这是android/安卓,和java不是一回事-- 请会安卓的来解答吧 解决方案二: **首先上面的三个private是定义在本类里的私有对象. super.oncreate()方法是默认继承的. 下面的setContentView是将R下面的layout中的newone设为初始布局 三个this.XXX是将上面的对象进行初始化,要不会报空指针异常. btn是个按钮,你的代码是给