热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个生成C#实体的存储过程

懒人的懒做法班门弄斧一下--创建一个处理名称的函数--将数据库中字段名为news_type_xx格式的转换为实体名为NewsTypeXxxIFOBJECT_ID(f_spl
懒人的懒做法
班门弄斧一下
--创建一个处理名称的函数
--将数据库中字段名为 news_type_xx 格式的转换为 实体名为 NewsTypeXxx

IF OBJECT_ID('f_split')IS NOT NULL
DROP FUNCTION dbo.f_split
GO
CREATE FUNCTION f_split(@s VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @str VARCHAR(1000),@split VARCHAR(100)
SELECT @s=@s+'_',@str=''
WHILE CHARINDEX('_',@s)>0
BEGIN
SET @split=left(@s,CHARINDEX('_',@s))
SET @str=@str+UPPER(left(@split,1))+right(@split,LEN(@split)-1)
SET @s=STUFF(@s,1,CHARINDEX('_',@s),'')
END
RETURN REPLACE(LEFT(@str,LEN(@str)-1),'_','')
END
GO
--创建存储过程
IF OBJECT_ID('c#','p')IS NOT NULL
DROP PROC c#
GO
CREATE PROC c#(@ VARCHAR(100))
AS
DECLARE @i INT,@j INT, @a VARCHAR(20), @s VARCHAR(8000),@g VARCHAR(30)
DECLARE @t TABLE(id INT,[name] VARCHAR(100),[type] VARCHAR(20),[value] VARCHAR(200))
SET @i=1
SET @a='/// '
SET @g=' { get; set; }'
SET @s=@a+CHAR(10)+'/// '
INSERT INTO @t
SELECT id=ROW_NUMBER() OVER(ORDER BY c.[name]), 
CAST(c.[name] AS VARCHAR(100)) AS [name] ,
CAST(t.[name] AS VARCHAR(30)) AS [type] , 
CAST(ISNULL(e.[value],'') AS VARCHAR(200)) AS [value]--字段说明
FROM SYS.COLUMNS  c 
LEFT JOIN  SYS.TYPES t
ON c.user_type_id=t.user_type_id
LEFT JOIN SYS.EXTENDED_PROPERTIES e 
ON e.class=1 AND c.[object_id]=e.major_id AND c.column_id=e.minor_id 
WHERE c.[object_id]= OBJECT_ID(''+@+'')
SELECT @j=MAX(id) FROM @t
WHILE @i<=@j
BEGIN 
  SELECT @s=@s + [value] FROM @t WHERE id=@i
SET @s=@s+CHAR(10)+@a+CHAR(10)
  SELECT @s=@s+'public'+CHAR(32)+CASE [type] WHEN 'datetime' THEN 'DateTime'
         WHEN 'varchar' THEN 'String'
         WHEN 'int' THEN 'Int32'
WHEN 'bit' THEN 'Boolean'
         ELSE 'String' END--常用的几个数据类型,根据需要可扩充
       +CHAR(32) FROM @t WHERE id=@i
   SELECT @s=@s+ dbo.F_split([name]) --调用函数
          FROM @t WHERE id=@i
  SET @s=@s+@g+CHAR(10)+CHAR(10)
  SET @s=@s+@a+CHAR(10)++'/// '
SET @i=@i+1
END
print @S
GO

--测试
EXEC C# 'moa_news'
--结果

/// 
/// 是否提醒1为提醒,0为不提醒,默认0
/// 
public Boolean IsRemind { get; set; }

/// 
/// 是否置顶1为置顶,0为不置顶,默认0
/// 
public Boolean IsTop { get; set; }

/// 
/// 是否可见1为可见0为不可见,默认可见
/// 
public Boolean IsVisible { get; set; }

/// 
/// 新闻发布人
/// 
public String NewsAuthor { get; set; }

/// 
/// 新闻内容
/// 
public String NewsContent { get; set; }

/// 
/// 新闻发布时间
/// 
public DateTime NewsCreateDate { get; set; }

/// 
/// 附件地址
/// 
public String NewsEnclosurePath { get; set; }

/// 
/// 附件名称
/// 
public String NewsEnclosureTitle { get; set; }

/// 
/// 新闻生效时间
/// 
public DateTime NewsFromDate { get; set; }

/// 
/// 新闻编号
/// 
public Int32 NewsId { get; set; }

/// 
/// 可阅读该新闻的机构列表,以“,”分隔
/// 
public String NewsOrganiztionList { get; set; }

/// 
/// 可阅读该新闻的角色列表,以“,”分隔
/// 
public String NewsRoleList { get; set; }

/// 
/// 新闻标题
/// 
public String NewsTitle { get; set; }

/// 
/// 新闻失效时间
/// 
public DateTime NewsToDate { get; set; }

/// 
/// 
/// 
public Int32 NewsType { get; set; }

/// 
/// 可阅读该新闻的人员列表,以“,”分隔
/// 
public String NewsUserList { get; set; }

11 个解决方案

#1


sf

#2


为什么不用codesmith或者其它代码生成器,或者自己写一个代码生成器都比你这个要简单?

不知道你这样写有什么优势?

#3


引用 2 楼 fibona 的回复:
为什么不用codesmith或者其它代码生成器,或者自己写一个代码生成器都比你这个要简单?

不知道你这样写有什么优势?

没有用过codesmith和代码生成器,我对c#好生疏 
这个完全是自己写这个玩的,没啥优势

#4


支持一下了。

#5


这个没法和CodeSmith比,CodeSmith强大得多。

#6


学习了..

#7


反正自己习惯用就可以了,不过还是觉得CodeSmith,或者用应用程序来生成会更好一点

#8


自学练习:)

#9


引用 8 楼 ihandler 的回复:
自学练习:)

#10


study

#11


IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb 
GO
CREATE TABLE tb(id VARCHAR(3),pid VARCHAR(3),[name] VARCHAR(10))
GO
INSERT INTO tb SELECT '001',NULL,'河南省' 
UNION ALL SELECT '002','001','洛阳市'
UNION ALL SELECT '003','001','新乡市' 
UNION ALL SELECT '004','002','栾川县' 
UNION ALL SELECT '005','003','长垣县' 
UNION ALL SELECT '006','002','孟津县' 
UNION ALL SELECT '007','004','冷水乡' 
UNION ALL SELECT '008','004','叫河乡' 
UNION ALL SELECT '009','008','A村' 
UNION ALL SELECT '010','008','B村'
GO
/*
1、查询指定节点及其所有子节点
--如:已知 栾川县
--得到结果

id   pid  name
---- ---- ----------
004  002  栾川县
007  004  冷水乡
008  004  叫河乡
009  008  A村
010  008  B村
*/
--*************************查询开始*********************
--SQL2005 使用CTE
DECLARE @ VARCHAR(10)
SET @='栾川县'
;WITH XiaoAi AS
(
 SELECT id FROM tb WHERE [name]=@
 UNION ALL
 SELECT t.id FROM XiaoAi AS a INNER JOIN tb AS t ON a.id=t.pid
)
SELECT t.* FROM XiaoAi AS a LEFT JOIN tb AS t ON t.id=a.id

--SQL 2000 使用函数
IF OBJECT_ID('dbo.XiaoAi') IS NOT NULL DROP FUNCTION dbo.XiaoAi
GO
CREATE FUNCTION dbo.XiaoAi(@ VARCHAR(20)) 
RETURNS @t TABLE(id VARCHAR(3), pid VARCHAR(3), [name] VARCHAR(20),Level INT)
AS 
BEGIN 
DECLARE @level INT
SET @level=1
INSERT INTO @t SELECT *,@level FROM tb WHERE [name]=@
WHILE(@@ROWCOUNT>0)
BEGIN 
SET @level=@level+1
INSERT INTO @t SELECT t.*,@level FROM tb AS t,@t AS a WHERE a.id=t.pid AND a.level=@level-1
END
RETURN 
END
GO
--调用函数
SELECT id, pid,[name]  from dbo.XiaoAi('栾川县')
--****************************查询结束*************************************
/*
2、查询指定节点及其所有父节点
如:已知 栾川县
得到以下结果
id   pid  name
---- ---- ----------
001  NULL 河南省
002  001  洛阳市
004  002  栾川县
*/
----------------------测试开始-------------------------------------------------
DECLARE @s VARCHAR(10)
SET @s='栾川县'
SELECT id, pid,[name] INTO # FROM tb WHERE [name]=@s
WHILE @@ROWCOUNT>0
BEGIN
INSERT INTO # SELECT t.id, t.pid,t.[name] FROM tb AS t 
INNER JOIN # AS a ON t.id=a.pid AND t.id NOT IN(SELECT ID FROM #)
END
SELECT * FROM # ORDER BY ID
-----------------------测试结束-------------------------------------------------

推荐阅读
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
author-avatar
最美的你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有