agStoredProc






4.20/5 (10投票s)
2004 年 11 月 19 日
2分钟阅读

68375

1131
使用 agStoredProc,您可以从 MS-SQL 数据库中的所有存储过程生成一个 C# 类。无需 Microsoft ApplicationBlocks。
引言
在开发使用存储过程的应用程序时,我厌倦了每次都重复相同的过程:存储过程名称、参数、参数类型、参数方向……天啊,真的,这太令人厌烦了。所以有一次,我决定不再这样做。这就是我开发这个小应用程序并决定与您分享的原因。
我开发它的时间,2004 年 5 月,我还不了解 Microsoft Application Blocks,所以不得不硬编码,这么说吧。如果我之前知道 MS App Blocks,我就会用它来做,但已经完成了,而且运行速度还算快:五秒钟内处理大约 40,000 行代码。一位朋友告诉我,我可以使用 CodeDom
命名空间来做到这一点,但说实话,我只使用了 SqlClient
类和一个可怜的 StringBuilder
,所以只是纯粹的字符串拼接。
这是运行应用程序的截图
这是我用来获取每个存储过程的参数的一小段代码
foreach (string str in commands)
{
SqlCommand myCommand = new SqlCommand("SELECT * " +
"FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_NAME = '"
+ str + "'", mycon);
SqlDataReader myReader = myCommand.ExecuteReader();
if (myReader.HasRows)
{
string prms = "";
SqlCommand cmdParams = new SqlCommand("SELECT DATA_TYPE," +
" PARAMETER_NAME FROM INFORMATION_SCHEMA.PARAMETERS" +
" WHERE SPECIFIC_NAME = '"+str+"'", mycon2);
SqlDataReader ParamsReader = cmdParams.ExecuteReader();
int prm = 0;
if (ParamsReader.HasRows)
{
while(ParamsReader.Read())
{
string prmname = ParamsReader.GetString(0);
prms += ParamTypeToString(prmname) + " _" +
ParamsReader.GetString(1).Remove(0,1).ToLower()
+", ";
prm++;
}
}
prms = prms.Remove(prms.Length -1, 1);
strBuilder.Append("\n\n\tpublic void " + commands[i] + "(" +
prms.Remove(prms.Length -1, 1)+")");
strBuilder.Append("\n\t{");
string sqlcon = (this.tbConnection.Text == "")? "\"" +
this.connection+"\"" : this.tbConnection.Text;
strBuilder.Append("\n\t\tSqlConnection sqlCon =
new SqlConnection("+sqlcon+");");
strBuilder.Append("\n\t\tSqlCommand myCommand =
new SqlCommand(\""+commands[i]+"\", sqlCon);");
strBuilder.Append("\n\t\tmyCommand.CommandType =
CommandType.StoredProcedure;");
while(myReader.Read())
{
string _size = (myReader.IsDBNull(9)) ? "": ", " +
myReader.GetInt32(9).ToString();
string param_name_whole = myReader.GetString(7);
string param_name = param_name_whole.Remove(0,1);
如您所见,这只是我针对 SQL Server 运行的一些命令。我以前不知道这些命令,但通过帮助文档,我找到了它们,并且它们真的有效。
摘要
诚实地说,有更好的方法来做到这一点,但这是我找到的第一种方法。当时我不知道 Application Blocks,而且在完成应用程序后,我真的不想更改代码,因为它确实有效,并且对于它的用途来说,它相当不错。它会多次访问 SQL Server 以查找存储过程,然后是参数等,但我认为它运行速度很快。
我希望您能找到它的用处。希望您喜欢它。