小编pil*_*mps的帖子

SQL Server 2008向information_schema.columns授予权限

我有一系列存储过程从数据库中选择数据.我有一个角色(cctc_reader),它具有在程序上授予的执行权限.其中一个过程调用另一个存储过程,该过程recControl_system_option依次进行查询Information_schema.columns.

问题是在这个proc中查询

select column_name from information_schema.columns where table_name = 'recControl_manager'

不会返回任何记录.cctc_reader具有以下授权权限:

  • 每个选择过程
  • recControl_system_option

所以在理论上这应该有效.在dbo下运行时我没有问题.

如果我将db_datareader授予cctc_reader,那么查询就可以了,但我不想将读者权限授予所有表(因此我使用了存储过程).我已经尝试在一些文章中建议的主数据库中的Information_schema上授予选择权限,但仍然无法使其工作.

有什么建议?

sql-server permissions information-schema sql-server-2008

8
推荐指数
1
解决办法
9344
查看次数

C#Func <>和泛型

因此,在处理Func <>,Generics和lambda表达式时,我有点不在我的舒适区域,但我认为我得到了一般的想法(有点),但仍然有点困惑.

我已经实现了SortableObservableCollection类(取自某个地方的在线 - 感谢无论是谁从我那里得到它!)它的使用方式如下:

_lookuplistViewModel.Sort(x => x.BrandName, ListSortDirection.Ascending);
Run Code Online (Sandbox Code Playgroud)

其中x是可排序集合实现的对象类型.在这个例子中,BrandName是实现的对象类型的属性,但是我想在泛型类中使用上面的代码并传入要排序的属性.Sort方法如下所示:

public void Sort<TKey>(Func<T, TKey> keySelector, ListSortDirection direction)
{
  switch (direction)
  {
    case ListSortDirection.Ascending:
      {
        ApplySort(Items.OrderBy(keySelector));
        break;
      }
    case System.ComponentModel.ListSortDirection.Descending:
      {
        ApplySort(Items.OrderByDescending(keySelector));
        break;
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

调用Sort方法的泛型类定义如下:

public class ExtendedLookupManagerViewModel<VMod, Mod> : LookupManagerViewModel
where VMod : ExtendedLookupViewModel
where Mod : ExtendedLookupModelBase
Run Code Online (Sandbox Code Playgroud)

我想像这样创建一个它的实例:

_medProd = new ExtendedLookupManagerViewModel<MedicinalProductViewModel, MedicinalProduct>(string property);
Run Code Online (Sandbox Code Playgroud)

在哪里property排序的属性.理想情况下,这应该是类型安全的,但字符串就足够了.

任何人都可以帮助引导我朝着正确的方向前进吗?

c# generics

7
推荐指数
1
解决办法
1881
查看次数

序列化 F# 函数

使用 F# 我有一些我想使用 Newtonsoft.Json 序列化到磁盘的配置。配置数据是一种记录类型。记录类型中的字段之一是 string->bool 类型的函数,用于将字符串与给定值进行比较。例如

(fun (x:string) -> x = "1")
Run Code Online (Sandbox Code Playgroud)

序列化类型成功,但该字段未成功存储(记录为“{}”),因此反序列化失败。这似乎是设计使然。

如何存储函数,以便在反序列化时可以使用它从磁盘填充记录类型并且仍然可以执行?

我已经将引用视为将表达式存储为数据的一种方式,但我不确定这是否可行。如果是,那么我正在努力使其工作。

怎样才能达到我所需要的?

更新;

type Logic = string -> bool
Run Code Online (Sandbox Code Playgroud)

记录类型存储配置;

type Exclusion = 
| FromDataValue of QItem * Logic * ExcludedItems
| FromDataValuesAnd of (QItem * Logic) seq * ExcludedItems          
| FromDataValuesOr of (QItem * Logic) seq seq * ExcludedItems 
Run Code Online (Sandbox Code Playgroud)

排除记录由用户填充,并针对某些数据集运行,从退货集合中排除项目。QItem 表示应用 Logic 函数的数据集中的一个字符串,如果返回 true,则 ExcludedItems 中的项目将从结果中排除。

最初,配置是由解决方案中的用户创建的,因此一切正常。但是,一旦创建了配置,我希望能够将配置保存到光盘,以便在需要时可以加载并再次运行。

所以我需要能够存储它,但我希望能够将它存储为一个字符串,然后在加载时再次运行它。

f# functional-programming json.net

3
推荐指数
1
解决办法
547
查看次数

C#Activator.CreateInstance MissingMethod异常

我正在尝试创建具有相同基类型的对象实例,如下所示:

  Assembly myAssembly = Assembly.GetExecutingAssembly();
  var objs = myAssembly.GetTypes().Where(t => t.BaseType == typeof(SearchLogicObjectBase)).OrderBy(o => o.FullName);

  foreach (var item in objs)
  {
    SearchLogicObjectBase p = (SearchLogicObjectBase)Activator.CreateInstance(item.GetType(), new Object[] { false });        
    _searchlogic.AddDefaultSearchObject(p);
  }
Run Code Online (Sandbox Code Playgroud)

派生对象具有如下构造函数:

public SearchLogicCsri()
  : this(true)
{ }

public SearchLogicCsri(bool extendsearch)
  : base(extendsearch)
{
  Table = "csri";
  ViewModel = "CsriViewModel";
  ExtendSearch = extendsearch;
}
Run Code Online (Sandbox Code Playgroud)

并且基础对象(SearchLogicObjectBase)有一个这样的构造函数:

public SearchLogicObjectBase(bool extendsearch)
{
  _extendsearch = extendsearch;
}
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码导致以下异常:

找不到类型为"System.RuntimeType"的构造函数.

基类和派生类型都有一个构造函数,它只需要一个布尔值,所以我不知道为什么我会得到错误.

有人可以帮忙吗?

c# activator

2
推荐指数
1
解决办法
1329
查看次数