共享两个自动生成存储过程的工具
开发一个项目或者开发一个应用系统初期大多数都是从数据库,类,UI界面开始的。其中最令人厌烦的是写些简单的CRUD的存储过程,以及调用这些存储过程的方法的类。
我花了很多时间在网上寻找,去找一个能根据能数据库中一个存在的数据表,为我们产生大部分存储过程和调用这些存储过程C#代码的实用的程序。这里共享两个我觉得还不错的程序给大家。
第一个是SQLAutoGen,如下图:
程序地址:http://www.codeproject.com/KB/database/SQLAutoGen.aspx
这是通过迭代我们选择数据表的列,来产生我们需要的代码。通过使用选择一些不同列(将出现在where子句中),使生产脚本变得相当智能。 (见下面的示例代码示例)
看上面图片,能抵得说很多话,它来表明这个应用程序的操作。
下面是这些代码,通过程序以不同的方式迭代本身,这里一个结合了SqlClient和SqlSMO访问数据库,得到table和columns等信息:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private ServerConnection serverConnection = null;
private void btnGo_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
lstTables.Items.Clear();
SqlConnection objCn = new SqlConnection(sqlControl1.ConnectionString);
serverConnection = new ServerConnection(objCn);
Server server = new Server(serverConnection);
TableCollection objTables = server.Databases[sqlControl1.DatabaseName].Tables;
foreach (Table objTable in objTables)
{
lstTables.Items.Add(objTable.Name);
}
this.Cursor = Cursors.Default;
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
if (chkSelect.Checked)
{
strSQL = "CREATE PROCEDURE [GetAll" + strTableName + "] " + Environment.NewLine;
strSQL += " As Select ";
foreach (Column item in server.Databases[sqlControl1.DatabaseName].Tables[strTableName].Columns)
{
keyCount++;
strSQL += "[" + item.Name.ToString() + "]";
if (keyCount < server.Databases[sqlControl1.DatabaseName].Tables[strTableName].Columns.Count) strSQL += "," + Environment.NewLine;
}
strSQL +=" from [" + strTableName + "]";
txtSQL.Text += strSQL + Environment.NewLine + Environment.NewLine;
}
下面是一个示例表画面,以及随后产生的脚本。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
CREATE PROCEDURE [DeleteVariables] (@ID int) As Delete from [Variables] Where ID = @ID
CREATE PROCEDURE [AddVariables] (@VarName varchar, @VarDesc varchar, @VarType varchar) As Insert Into [Variables] ( VarName, VarDesc, VarType) Values ( @VarName, @VarDesc, @VarType) select SCOPE_IDENTITY()
CREATE PROCEDURE [UpdateVariables] (@ID int, @VarName varchar, @VarDesc varchar, @VarType varchar) As Update [Variables] set VarName = @VarName, VarDesc = @VarDesc, VarType = @VarType Where ID = @ID
CREATE PROCEDURE [AddUpdateVariables] (@ID int, @VarName varchar, @VarDesc varchar, @VarType varchar) As Begin If (Select ID from [Variables] Where ID = @ID) <> 0 Begin Update [Variables] set VarName = @VarName, VarDesc = @VarDesc, VarType = @VarType Where ID = @ID End Else Begin Insert Into [Variables] ( VarName, VarDesc, VarType) Values ( @VarName, @VarDesc, @VarType) select SCOPE_IDENTITY() End End
第二个是codeplex上面的程序:Stored Procedure Generator (for SQL Server 2000/2005) ,界面如下图所示:
解决方案的结构如下:
项目地址:http://spgen.codeplex.com/
代码不是特别的难,有兴趣可以自己下载研究。这个程序产生的存储过程中的where子句中的列是固定的,注定了没有第一个程序那么灵活。
为了方便,这里直接提供了代码下载地址:
1、/Files/zhuqil/SQLGenSource.zip
2、/Files/zhuqil/SP_Gen_Public_SourceCodes_VS2005.zip
这里也向大家推荐这下面两个网站,写着写着到了今年的最后一天了,期待明年能将简单做到极致。
博客园,地球人都知道。
作者:朱祁林
出处:http://zhuqil.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。