- 浏览: 1623442 次
- 性别:
- 来自: 福州
文章分类
- 全部博客 (583)
- strust2.0 (14)
- hibernate2.0 (5)
- java (13)
- javaScript (59)
- AJAX (8)
- TFS (6)
- 其它 (20)
- CSS (23)
- asp (18)
- Dojo (5)
- 项目管理 (3)
- SQLServer (25)
- oracle (26)
- .NET (221)
- 开源系统 (6)
- 常识 (41)
- 软件架构 (1)
- My SQL (1)
- SilverLight (10)
- Flex (1)
- window7 (1)
- 网络安全 (2)
- CMS (1)
- ECShop (4)
- 邮件系统 (9)
- Linq (0)
- 淘宝店铺经营宝典 (0)
- flash插件 (1)
- Hubble.net全文检索 (1)
- 在线编辑器 (1)
- 正则表达式 (1)
- 创业 (1)
- asp.net mvc (1)
- 全文检索 (0)
- 全文检索 HubbleDotNet (1)
- Android (27)
- TFS bin (1)
最新评论
-
z小小Jean:
有具体的解决方法吗
用命名imp导入DMP时报无法解析指定的连接标识符的解决办法 -
njoiop:
这些都是常用接口,IP地址、手机归属和身份证查询接口,基站定位 ...
IP地址、手机归属和身份证查询接口 -
Fs_sky:
那导出DMP如何包含序列等其他东西?
在plsql中如何导出dmp文件 -
qiywtc:
请问该怎么判断视频的格式再选择对应的播放格式来播放啊?
asp.net各种类型视频播放代码(全) -
xinghenhouzi:
楼主说的版本不同无法导入导出是什么意思?我用10g的exp.e ...
在plsql中如何导出dmp文件
在我们写程序的时候,特别是数据库应用程序的时候,经常会遇到这样的情况:对于一个给定的表,写出这个表对应的类(用一句时髦的话说是实现业务实体类),类的数据成员是所有的字段,并且类含有该表的添加修改删除等操作。还有,对于一个给定的存储过程,要完成根据存储过程存取数据或别的数据库操作。如下代码就是我们通常要完成的:
1.表的业务实体化
对表的增加、修改操作
存储过程
上面处理表的代码也挺长的,但那只是7个字段,如果一个表含有二三十个字段的话,恐怕代码更长,同样,检查你写好的代码是否有错误也是一个痛苦的过程。
但是,写这些代码本身并没有多少难度,而且很多工作都是重复的,这就不能不启发我们通过一个程序来完成这些繁琐易出错的工作。
假如让我们来设计一个程序完成上面的代码,我们应该怎么做哪?
要完成上面的工作,我们首先应该找到我们要处理的表或存储过程。
我们也可以通过编程实现:
1.列出所有的数据库服务器
这样,所有的数据库服务器迷宫凝成都存在了ArrayList里,我们可以用一个下拉列表来列出所有的服务器,让用户选择他需要的一个。
2。得到选定服务器所有的数据库列表
要完成这个工作,我们需要用户输入这个数据库服务器的用户名和密码,代码如下:
这样就得到了数据库的列表,你同样可以让用户选择一个数据库。
3。列出选定数据库所有的用户表和存储过程
在这一步我们不用SQLDMO了,我们通过读取选定数据库的sysobjects表中的记录实现,当然,完成这个工作需要如下信息:你选择的数据库服务器名,用户名,密码,数据库名等信息:
这样我们就得到了所有的用户表和存储过程,注意这一句:
select * from sysobjects where (xtype='u' or xtype='p') and category<>2 order by name,这是关键的sql语句,其中xtype='u' 表示用户表,xtype='p'表示存储过程,category<>2表示不是系统存储过程。
下一步是取得选定表的所有字段或存储过程的所有参数
我们从表syscolumns取得我们想要到的东西:
strTableName = tbInfo.Name ;
string strSql = "select * from syscolumns where id=( " +
" select id from sysobjects where name='"+ strTableName + "')" ;
SqlDataAdapter sa = new SqlDataAdapter(strSql,conn) ;
DataSet ds = new DataSet() ;
sa.Fill(ds) ;
这样我们就把某个表(或存储过程)的所有字段信息放到了结果集ds里。
1.表的业务实体化
private int iId; public int Id { get { return iId; } set { iId = value; } } private string strName; public string Name { get { return strName; } set { strName = value; } } private string strCode; public string Code { get { return strCode; } set { strCode = value; } } private string strDescription; public string Description { get { return strDescription; } set { strDescription = value; } } private int iFatherid; public int Fatherid { get { return iFatherid; } set { iFatherid = value; } } private int iType; public int Type { get { return iType; } set { iType = value; } } private int iUserId; public int UserId { get { return iUserId; } set { iUserId = value; } }
对表的增加、修改操作
public bool Add() { SqlConnection conn = SqlConn.Instance().Connection; string strSql = "insert into book(id, Name, Code, Description, Fatherid, Type, UserId)" + "values(@id, @Name, @Code, @Description, @Fatherid, @Type, @UserId)"; SqlCommand command = new SqlCommand(strSql, conn); command.Parameters.Add("@id", SqlDbType.Int); command.Parameters["@id"].value = iId; command.Parameters.Add("@Name", SqlDbType.NVarChar, 50); if (strName != null) command.Parameters["@Name"].value = strName; else command.Parameters["@Name"].value = DBNull.value; command.Parameters.Add("@Code", SqlDbType.NVarChar, 255); if (strCode != null) command.Parameters["@Code"].value = strCode; else command.Parameters["@Code"].value = DBNull.value; command.Parameters.Add("@Description", SqlDbType.NVarChar, 255); if (strDescription != null) command.Parameters["@Description"].value = strDescription; else command.Parameters["@Description"].value = DBNull.value; command.Parameters.Add("@Fatherid", SqlDbType.Int); command.Parameters["@Fatherid"].value = iFatherid; command.Parameters.Add("@Type", SqlDbType.Int); command.Parameters["@Type"].value = iType; command.Parameters.Add("@UserId", SqlDbType.Int); command.Parameters["@UserId"].value = iUserId; try { conn.Open(); command.ExecuteNonQuery(); return true; } catch (Exception e) { throw (new Exception("Error in the Database" + e.Message)); } finally { conn.Close(); } } public bool Modify() { SqlConnection conn = SqlConn.Instance().Connection; string strSql = "update book set id = @id, Name = @Name, Code = @Code, Description = @Description, Fatherid = @Fatherid, Type = @Type, UserId = @UserId " + " where id =@id "; SqlCommand command = new SqlCommand(strSql, conn); command.Parameters.Add("@id", SqlDbType.Int); command.Parameters["@id"].value = iId; command.Parameters.Add("@Name", SqlDbType.NVarChar, 50); command.Parameters["@Name"].value = strName; command.Parameters.Add("@Code", SqlDbType.NVarChar, 255); command.Parameters["@Code"].value = strCode; command.Parameters.Add("@Description", SqlDbType.NVarChar, 255); command.Parameters["@Description"].value = strDescription; command.Parameters.Add("@Fatherid", SqlDbType.Int); command.Parameters["@Fatherid"].value = iFatherid; command.Parameters.Add("@Type", SqlDbType.Int); command.Parameters["@Type"].value = iType; command.Parameters.Add("@UserId", SqlDbType.Int); command.Parameters["@UserId"].value = iUserId; try { conn.Open(); command.ExecuteNonQuery(); return true; } catch (Exception e) { throw (new Exception("Error in the Database" + e.Message)); } finally { conn.Close(); } }
存储过程
public bool ExeSP_ddms_Modify_Trx( int aiPrsn_trx_no, int aiUlt_incid_no, int aiPrsn_trx_status_cd, DateTime adtTrx_cmpl_dt, string astrEmail_addr) { SqlConnection conn = SqlConn.Instance().Connection; string strSPName = "ddms_Modify_Trx"; SqlCommand command = new SqlCommand(strSPName, conn); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add("@prsn_trx_no", SqlDbType.SmallInt); command.Parameters["@prsn_trx_no"].value = aiPrsn_trx_no; command.Parameters.Add("@ult_incid_no", SqlDbType.Int); command.Parameters["@ult_incid_no"].value = aiUlt_incid_no; command.Parameters.Add("@prsn_trx_status_cd", SqlDbType.Int); command.Parameters["@prsn_trx_status_cd"].value = aiPrsn_trx_status_cd; command.Parameters.Add("@trx_cmpl_dt", SqlDbType.DateTime); if (adtTrx_cmpl_dt != DateTime.Minvalue) command.Parameters["@trx_cmpl_dt"].value = adtTrx_cmpl_dt; else command.Parameters["@trx_cmpl_dt"].value = DBNull.value; command.Parameters.Add("@email_addr", SqlDbType.VarChar, 70); if (astrEmail_addr != null) command.Parameters["@email_addr"].value = astrEmail_addr; else command.Parameters["@email_addr"].value = DBNull.value; try { conn.Open(); command.ExecuteNonQuery(); return true; } catch (Exception e) { throw (new Exception("Error in the Database" + e.Message)); } finally { conn.Close(); } }
上面处理表的代码也挺长的,但那只是7个字段,如果一个表含有二三十个字段的话,恐怕代码更长,同样,检查你写好的代码是否有错误也是一个痛苦的过程。
但是,写这些代码本身并没有多少难度,而且很多工作都是重复的,这就不能不启发我们通过一个程序来完成这些繁琐易出错的工作。
假如让我们来设计一个程序完成上面的代码,我们应该怎么做哪?
要完成上面的工作,我们首先应该找到我们要处理的表或存储过程。
我们也可以通过编程实现:
1.列出所有的数据库服务器
public static ArrayList GetServerList() { ArrayList alServers = new ArrayList(); SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); try { SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers(); for (int i = 1; i <= serverList.Count; i++) { alServers.Add(serverList.Item(i)); } } catch (Exception e) { throw (new Exception("取数据库服务器列表出错:" + e.Message)); } finally { sqlApp.Quit(); } return alServers; }
这样,所有的数据库服务器迷宫凝成都存在了ArrayList里,我们可以用一个下拉列表来列出所有的服务器,让用户选择他需要的一个。
2。得到选定服务器所有的数据库列表
要完成这个工作,我们需要用户输入这个数据库服务器的用户名和密码,代码如下:
public static ArrayList GetDbList(string strServerName, string strUserName, string strPwd) { ArrayList alDbs = new ArrayList(); SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass(); try { svr.Connect(strServerName, strUserName, strPwd); foreach (SQLDMO.Database db in svr.Databases) { if (db.Name != null) alDbs.Add(db.Name); } } catch (Exception e) { throw (new Exception("连接数据库出错:" + e.Message)); } finally { svr.DisConnect(); sqlApp.Quit(); } return alDbs; }
这样就得到了数据库的列表,你同样可以让用户选择一个数据库。
3。列出选定数据库所有的用户表和存储过程
在这一步我们不用SQLDMO了,我们通过读取选定数据库的sysobjects表中的记录实现,当然,完成这个工作需要如下信息:你选择的数据库服务器名,用户名,密码,数据库名等信息:
public static ArrayList GetTableList(string strServerName, string strDBName, string strUserName, string strPwd) { string strConStr = " data source=" + strServerName + ";initial catalog=" + strDBName + ";password=" + strPwd + ";persist security info=True;user id=" + strUserName; SqlConnection conn = new SqlConnection(strConStr); ArrayList alTbs = new ArrayList(); string strSql = "select * from sysobjects where (xtype='u' or xtype='p') and category<>2 order by name"; SqlCommand comm = new SqlCommand(strSql, conn); SqlDataReader sr = null; try { conn.Open(); sr = comm.ExecuteReader(); while (sr.Read()) { string strName = sr["name"].ToString(); bool blTable = sr["xtype"].ToString().Trim().ToUpper() == "U" ? true : false; TableInfo tb = new TableInfo(strName, blTable); alTbs.Add(tb); } } catch (Exception err) { throw (new Exception("取表明列表出错:" + err.Message)); } finally { if (sr != null) { sr.Close(); sr = null; } conn.Close(); } return alTbs; }
这样我们就得到了所有的用户表和存储过程,注意这一句:
select * from sysobjects where (xtype='u' or xtype='p') and category<>2 order by name,这是关键的sql语句,其中xtype='u' 表示用户表,xtype='p'表示存储过程,category<>2表示不是系统存储过程。
下一步是取得选定表的所有字段或存储过程的所有参数
我们从表syscolumns取得我们想要到的东西:
strTableName = tbInfo.Name ;
string strSql = "select * from syscolumns where id=( " +
" select id from sysobjects where name='"+ strTableName + "')" ;
SqlDataAdapter sa = new SqlDataAdapter(strSql,conn) ;
DataSet ds = new DataSet() ;
sa.Fill(ds) ;
这样我们就把某个表(或存储过程)的所有字段信息放到了结果集ds里。
发表评论
-
【转】C#定时执行某个程序
2015-03-16 17:33 663using System; using System. ... -
多行文本框字符数长度验证的解决方案
2012-03-02 16:04 1155在ASP.NET系统中经常会遇到验证文本框长度,比如数据库里是 ... -
【转】asp.net(c#)通过两个点的经纬度计算距离
2012-01-12 14:14 1348原理: 地球赤道上环绕地球一周走一圈共40075.04公里 ... -
【转】GSM手机短信软件的实现(C#)
2011-11-30 13:55 1247http://www.cnblogs.com/Engin/ar ... -
[转]C#开发短信收发软件的原理
2011-11-16 16:44 1611坛子里好像很多人对如何自己用C#开发手机短信有兴趣,正好我也做 ... -
TCPClient 类实现网络互联、通信
2011-10-29 11:16 2898TcpClient 为 TCP 网络服务提供客户端连接。 S ... -
Hubble.Net实现全文检索
2011-07-25 19:30 3981一、 下载安装 到Hubble.net 项目首页 http: ... -
c# 获取当前周第一天、最后一天,当前月第一天、最后一天的实现代码
2011-04-17 18:39 5201获取当前周工作日第一天、最后一天 int dayOfWee ... -
c#通过调用7z.exe实现解压文件
2011-03-05 15:47 46027-Zip 简介 7-Zip 是一款号称有着现今最高压缩比的 ... -
【转】IEnumerable 和 IEnumerator 接口
2011-03-04 17:12 1981类继承关系:public interface IQueryab ... -
【转】C#获取文件的绝对路径
2011-03-04 17:08 2430要在c#中获取路径有好多方法,一般常用的有以下五种: ... -
ListBox之间的数据项的移动操作
2010-09-29 11:04 1511<%@ Page Language="C# ... -
【转】asp.net中URL参数传值中文乱码的三种解决办法
2010-09-21 22:31 3374在做Asp.Net开发的时候,经常会遇到页面乱码的问题,下面是 ... -
【转】ASP.NET文件下载函数
2010-09-21 22:29 1357在你的Page_Load中添加这样的代码: Page.Re ... -
【转】在ASP.NET中实现多文件上传
2010-09-21 22:25 1186在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET ... -
[转]ASP.NET中常用的文件上传下载方法
2010-09-21 22:23 1775文件的上传下载是我们在实际项目开发过程中经常需要用到的技 ... -
HTML文章中截取摘要的问题[转]
2010-06-09 10:46 1824博客系统通常的做法是,在博客的首页只显示文章的摘要,点击标题进 ... -
获取 asp:Button 控件的的ComandName值的方法
2010-05-22 17:31 1205protected void btn_Save_Click ... -
ASP.NET防止用户多次登录的方法
2010-05-06 12:34 1542常见的处理方法是,在 ... -
使用 Enter 键提交表单
2010-04-27 14:04 1299一、使用 JS 代码 我们在表单里面的 TextBox (as ...
相关推荐
开发DOTNET应该对这个不陌生,功能相当不错,自动生成各种DOTNET的三层模型,工厂模型,通过数据表自动生成实体类。 大大减少了开发的时间。
。Net下的强大的代码生成工具 可以对实体类自动生存,自动与数据库映射
基于T4引擎根据模板自动生成代码,如生成实体类、业务逻辑类、前台页面以及后代代码等。 运行环境: dotnet framework4.0
C#代码生成器源码,可根据数据结构生成数据表的实体(Entity),数据操作类(Access).开发环境:vs2005+sql2005.
它集系统设计,代码自动生成等功能于一体 系统运用分层原理和组件原理,将所有的基于数据库访问的系统划分为用户界面层(UI),业务规则层(BLL), 数据访问层(DAL)和数据库层(DB). 每一下层为上层提供支持,一般不跨层...
该版本相对于2.0增加了自编译数据表字段,不再需要使用CodeSmith工具,真正实现代码的自动化,同进修正了在分页查询出现的问题 本工具附有详细的使用说明,有助于用户更好地使用本工具 如有问题请联系本人...
该工具可以实现存储过程自动生成增\删\改\查的功能和操作类代码,并且还可以根据表字段定制代码.安全实惠,简洁精致,该版本为升级版1.1 为了节约网络带宽,请通过加入qq技术讨论群:23776951,文件(约20k)在群共享...
http://download.csdn.net/source/270762 可以实现存储过程自动生成增\删\改\查的功能和操作类代码,并且还可以根据表字段定制代码.安全实惠,简洁精致,大大提高程序员的生产...
Textura.Code是Roslyn API的包装器,用于生成,保存和编译C#代码。 它提供了方法和帮助器来生成类,方法,语句和表达式。
codesmith(数据操作层代码自动生成) soap (开发包,包括高级特征),Nunit
RefitGenerator是一个全球性dotnet tool用来生成从OpenAPI的架构客户端代码。 用法 输入regen -h将显示参数列表: -u或--url -OpenApi json或yaml的URL -f或--file -OpenApi json或yaml本地文件的路径 -o或--...
简单,好用的模板,可以帮你生成大部分代码。 除了表示层的代码外,数据访问层、业务逻辑层代码都会自动生成。
wps的二次开发网上相关资料...WpsHelper是一个生成wps报表的小程序,内含源代码,简单的封装了一些关于其基本操作的方法,有需要的人可以直接使用,也可参考改进,少走弯路吧。基于dotNet平台的,若要运行还需安装有wps
WebSokcetRPC-用于.NET的WebSocket上的RPC 用于.NET的WebSocket RPC库,具有自动JavaScript客户端代码生成功能,支持ASP.NET Core。 教程:为什么选择WebSocketRPC? 轻巧的唯一的依赖关系是用于序列化/反序列化的库...
Vue + .NetCore前初步分离,支持对前端,后台基础业务代码扩展的快速发开框架 ...支持(主从表)一对一前代码自动生成,并支持数据源自动绑定与业务代码扩展,不需要写任何代码 支持一对多从表自定义扩展(不限
1.这个版本使用 C# 重写全部代码,如果要使用本程序必须安装 .Net Framework v2.0 或以上版本。(最下方有下载地址) 2.加入了 v3.5 版本的 ildasm、sn 程序,如果要使用 3.5 版本必须先安装 .Net Framework v3.5。 3....
基于的C#动态程序集构建库,该库允许开发者在运行时使用C#代码生成域/程序集/类/结构体/枚举/连接/方法等,从而程序在运行的时候可以增加新的Natasha集成了域管理/插件管理,可以实现域隔离,域卸载,热拔插等功能...
自动生成课程表。 :sparkles: 特征 该程序旨在自动为中大学生生成课程表,以帮助他们进行学术规划。 :link: 获得访问权限 该程序已部署在Azure上 :package: 。 您可以从访问它。 :rainbow: 浏览器支持 边缘 ...
可克隆使用C#Source Generator自动生成克隆方法有时您想克隆一个对象。 您可以实现 clone 方法,但是当开发人员添加新的 Field 或 Property 时,也应该更改 clone 方法。 另一种方法是使用性能不佳的反射。 此源...
典型相关分析matlab实现代码 HanlpNet HanLp的dotNet调用,利用IKVM 调用java 开发的hanlp.jar包 强大的NLP轮子,目前在.net上暂无实现, 为方便.net使用HanLp使用收集生成1.7.7版本的dll工具类与使用demo合集(正在...