我正在尝试检索StoredProcedure中所有参数的DefaultValue.我的应用程序是在C#.NET中构建的,用于访问Microsoft SQL 2008数据库.
我使用SqlCommandBuilder.DeriveParameters相当有效地获取大部分参数信息,但它不返回参数的“DefaultValue”,所以我使用SMO来获取该特定属性.
这是我目前的代码:
Server svr = new Server(new ServerConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)));
StoredProcedure sp = svr.Databases["MyDatabase"].StoredProcedures["mySproc", "myScheme"];
svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "Name");
svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "DefaultValue");
Dictionary<string, string> defaultValueLookup = new Dictionary<string, string>();
foreach (StoredProcedureParameter parameter in sp.Parameters)
{
string defaultValue = parameter.DefaultValue;
string parameterName = parameter.Name;
defaultValueLookup.Add(parameterName, defaultValue);
}
然而,即使我添加了svr.SetDefaultInitFields优化(这确实取得了显着改进〜10倍的改进),这也非常慢.
有人有进一步的优化想法吗?
最佳答案 我有一个熟悉的问题,发现如果你使用…
svr.SetDefaultInitFields(typeof(StoredProcedure), false)
它的速度更快.我认为,除了任何其他选项,它实际上取得了所有东西,但是如果你关闭它,那么只要获得你的参数,速度的提升是巨大的.对于10个参数,从5-6秒到0.5秒进行挖掘.仍然不是很完美但适合居住.
编辑
自从玩这个以后,我发现typeof(StoredProcedure)级别的appraoch效果最好.在我的测试中,使用typeof(StoreedProcedureParameter)选项始终为1.5秒左右,而使用typeof(StoredProcedure)版本则为0.5秒左右.
如果有人能告诉我原因,我会感兴趣吗?