65.9K
CodeProject 正在变化。 阅读更多。
Home

存储过程生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (12投票s)

2007年6月21日

CPOL

2分钟阅读

viewsIcon

64965

downloadIcon

3278

此工具为选定的表创建基本的 Select、Insert、Update 和 Delete 存储过程。

引言

如果我们使用数据集作为数据访问对象,每次创建新项目时,在数据库设计完成后,我们都希望为每个表创建基本的存储过程,例如SelectInsertUpdateDelete。 如果一个表有 10 列,编写不需要动脑筋的令人讨厌的存储过程真是令人头疼。 我决定创建一个实用程序,可以为我们一键创建这些存储过程(对于选定数据库中的所有表)。

背景

我创建此应用程序的动机是自动化存储过程,因此为了浏览服务器和数据库,我从Michael Potter那里抄袭了代码。 您可以从此链接找到他的文章。

Using the Code

首先,此实用程序允许您浏览可用的服务器

Screenshot - SelectServer.jpg

选择数据库后,您需要选择一个有效的数据库。 如果您知道您想要什么,您只需键入这两个。 对于数据库,前提是:您必须提供在该特定服务器中创建的有效用户名和密码,并且它应该有权访问您要选择的数据库。

Screenshot - SelectDatabase.jpg

选择数据库后,您可以单击“获取表”按钮。 这会触发一个事件(存储过程)以获取所选数据库中的所有表名。

CREATE   PROCEDURE DBO.TableNameSelect
(    
  @TableCatalog AS VARCHAR(100)
) AS
SELECT Table_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
and       TABLE_CATALOG = @TableCatalog
and       TABLE_NAME <>   'dtproperties'
GO

这会显示如下所示的表

Screenshot - Create_Stored_Procedure.jpg

您可以选择要创建的存储过程:SelectInsertUpdateDelete。 选择后,单击“创建过程”按钮,系统将通过以下存储过程获取每个表的所有列。

CREATE PROCEDURE DBO.ColumnNameSelect 
(
@TableName AS VARCHAR(100) 
) AS 
SELECT COLUMN_NAME, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_Name = @TableName 
GO 

附注:系统搜索上述存储过程,如果找不到,则会创建它,所以不用担心。

系统现在拥有它需要的所有数据。 现在我们可以根据需要创建存储过程。 例如,要创建“Select 存储过程”,我们可以执行类似这样的操作

try 
{
  selectBuilder.AppendLine(string.Format("[{0}Select] ( @{1} AS INT) AS ", 
                           tableName, columnTable.Rows[0]["Column_Name"])); 
  selectBuilder.AppendLine("SELECT ");
  foreach (DataRow row in columnTable.Rows) 
  { 
    selectBuilder.Append(string.Format("[{0}],", row["Column_Name"])); 
  }
  selectBuilder = RemoveLastComma(selectBuilder); 
  selectBuilder.AppendLine(string.Format(" FROM [{0}] ", tableName)); 
  selectBuilder.Append(string.Format("WHERE [{0}] = @{0}", 
                                    columnTable.Rows[0]["Column_Name"])); 
  DataAccess.CreateProcedure(selectBuilder.ToString(), connection); 
}
catch (Exception ex) 
{ 
  throw new Exception(ex.Message); 
} 

关注点

在创建此实用程序时,我只是想到可以创建一个企业对象框架,它可以作为此框架的扩展。 好吧,我将继续这样做。

附注:代码创建并审核创建的存储过程。

历史

  • 2007 年 6 月 20 日:初步帖子
© . All rights reserved.