通过C#或SQL获取存储过程参数?
我希望find一个简单的方法来获取存储过程参数的参数列表。 如果程序有3个参数,我想要一个这样的列表:
参数1
参数2
参数3
最好能在C#代码中做到这一点,但SQL也足够了。 想法?
select * from information_schema.parameters where specific_name='your_procedure_name'
对于SQL Server这应该工作。
private void ListParms() { SqlConnection conn = new SqlConnection("my sql connection string"); SqlCommand cmd = new SqlCommand("proc name", conn); cmd.CommandType = CommandType.StoredProcedure; conn.Open(); SqlCommandBuilder.DeriveParameters(cmd); foreach (SqlParameter p in cmd.Parameters) { Console.WriteLine(p.ParameterName); } }
如果您熟悉企业库,那么使用数据访问应用程序块有一个允许DiscoverParameters()的好方法。
DbCommand command = new DbCommand(); command.CommandText = @"myStoredProc"; command.CommandType = CommandType.StoredProcedure; Database database = new SqlDatabase(myConnectionString); database.DiscoverParameters(command); // ...
一些可能有帮助的链接:
- DiscoverParameters方法 ;
- Microsoft.Practices.EnterpriseLibrary.Data命名空间 。
上面的链接是指EntLib 3.1。 根据您使用的.NET Framework版本,您也可以考虑在此链接下载正确的EntLib版本。
你可以做到这一点,而不必触摸SqlConnection,我发现这是一个奖金。
这使用SqlServer.Management.Smo
命名空间,因此您需要在项目中引用Microsoft.SqlServer.ConnectionInfo
, Microsoft.SqlServer.Management.Sdk
和Microsoft.SqlServer.Smo
。
然后使用下面的代码:
Server srv = new Server("serverNameHere"); srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect; srv.ConnectionContext.LoginSecure = false; //if using username/password srv.ConnectionContext.Login = "username"; srv.ConnectionContext.Password = "password"; srv.ConnectionContext.Connect(); Database db = srv.Databases["databaseNameHere"]; foreach(StoredProcedure sp in db.StoredProcedures) { foreach(var param in sp.Parameters) { string paramName = param.Name; var dataType = param.DataType; object defaultValue = param.DefaultValue; } }