我正在寻找T-SQL代码来列出SQL Server中所有数据库中的所有表(至少在SS2005和SS2008中;最好也适用于SS2000).然而,问题是,我想要一个结果集.这排除了Pinal Dave的优秀答案:
sp_msforeachdb 'select "?" AS db, * from [?].sys.tables'
Run Code Online (Sandbox Code Playgroud)
上面的存储过程为每个数据库生成一个结果集,如果你在像SSMS这样可以显示多个结果集的IDE中,这很好.但是,我想要一个结果集,因为我想要一个本质上是"查找"工具的查询:如果我添加一个像这样的子句,WHERE tablename like '%accounts'
它会告诉我在哪里可以找到我的BillAccounts,ClientAccounts和VendorAccounts表,无论它们驻留在哪个数据库中在.
到目前为止,Remus的回答看起来最有趣.我发布了一个版本的修改版本,包括数据库名称和示例过滤器子句,而不是将其作为答案发布并将其授予自己.看起来Remus会在这一点上获得答案!
declare @sql nvarchar(max);
set @sql = N'select b.name as "DB", a.name collate Latin1_General_CI_AI as "Table", object_id, schema_id, cast(1 as int) as database_id from master.sys.tables a join sys.databases b on database_id=1 where a.name like ''account%''';
select @sql = @sql + N' union all select b.name as "DB", a.name collate Latin1_General_CI_AI, object_id, schema_id, ' + cast(database_id as …
Run Code Online (Sandbox Code Playgroud) 关于恢复WinForm位置和大小的许多帖子.
例子:
但我还没有找到使用多个监视器执行此操作的代码.
也就是说,如果我使用监视器2上的窗口关闭我的.NET Winform应用程序,我希望它将窗口大小,位置和状态保存到应用程序设置,以便以后可以在我重新启动应用程序时恢复到监视器2.如果在上面的代码项目示例中它包含一些健全性检查,那将是很好的,因为如果保存的位置大部分是在屏幕外,它"修复"它.或者如果保存的位置在不再存在的显示器上(例如我的笔记本电脑现在没有我的第二台显示器),那么它会正确地将其移动到显示器1.
有什么想法吗?
我的环境:C#,.NET 3.5或更低版本,VS2008
作为一个喜欢彻底记录的人,我很高兴发现SupportsWildcards
PowerShell V3中添加的属性等.我已根据需要在我的库中使用该属性修饰参数.从长远来看,没有问题,但在短期内仍有很多人因各种原因使用V2(包括我在一个环境中).
仅仅因为一个属性,我的某些功能无法再在PowerShell V2中运行,这似乎很愚蠢.所以我正在寻找一种方法来模拟V2中的属性,实质上将其变成"无操作".
我认为,解决方案需要两个部分:
我正在寻找两个部分的指导,之前没有玩过自定义属性.
对于WinForm应用程序中的任何自定义对话框(窗体),我可以在显示它之前设置其大小和位置:
form.StartPosition = FormStartPosition.Manual;
form.DesktopBounds = MyWindowPosition;
Run Code Online (Sandbox Code Playgroud)
在处理多个监视器时,这一点尤为重要.如果没有此类代码,当您从已拖动到第二个监视器的应用程序打开对话框时,对话框将显示在主监视器上.这提供了糟糕的用户体验.
我想知道是否有任何钩子来设置标准.NET OpenFileDialog和SaveFileDialog(没有StartPosition属性)的位置.
(我是TortoiseHg的相对新人,所以忍受我:-)我在两台机器上使用TortoiseHg与我的远程源库进行通信.我在一台机器上进行了更改,提交了它们,并尝试将它们推送到远程存储库但是我忘了先拉一下来获取最新的代码.推送给了我几行输出,表明我可能忘记先拉(真的!)并提到类似"中止:推动创建新的远程分支......"之类的东西.
所以我做了一个pull,它在存储库资源管理器中添加了几个节点到我的图形的头部.问题是我尝试做的推送现在显示为存储库资源管理器中的一个分支.从服务器端(codeplex)看,它没有显示我尝试推送的迹象,表明这个意外分支仍在我的机器上是本地的.
我怎么能删除这个意外的分支?我尝试在图表中选择该节点,然后进行"恢复",但它似乎没有做任何事情.我想知道在本地机器上丢弃我的目录树是否最简单,并从服务器上做一个全新的,干净的拉动......?
新的C#6.0空条件运算符是一种方便的工具,用于编写更简洁,更简单的代码.假设有一个客户数组,那么如果customers
使用此方法为空,则可以获取null而不是长度(来自MSDN的示例):
int? length = customers?.Length;
Run Code Online (Sandbox Code Playgroud)
同样地,您可以使用以下方法获取null而不是客户:
Customer first = customers?[0];
Run Code Online (Sandbox Code Playgroud)
对于更精细的表达式,如果customers
为null,则第一个客户为null,或者第一个客户的Orders
对象为null,则返回null:
int? count = customers?[0]?.Orders?.Count();
Run Code Online (Sandbox Code Playgroud)
但是,有一个有趣的情况是不存在的客户,零条件运算符似乎没有解决.我们在上面看到覆盖了一个空客户,即customers
数组中的条目是否为空.但这与不存在的客户截然不同,例如5
在3元素阵列中查找客户或n
在0元素列表中查找客户.(请注意,同样的讨论也适用于字典查找.)
在我看来,零条件运算符专注于否定NullReferenceException的影响; IndexOutOfRangeException或KeyNotFoundException独自暴露,在角落里畏缩,需要自生自灭!我提出,在零条件运算符的精神下,它应该能够处理这些情况......这导致了我的问题.
我错过了吗?null条件是否提供了真正涵盖此表达式的任何优雅方式......
customers?[0]?.Orders?.Count();
Run Code Online (Sandbox Code Playgroud)
......没有第0个元素的时候?
PowerShell sqlps模块为PowerShell 中的SQL Server访问提供核心支持,其Invoke-Sqlcmd cmdlet是执行文字查询或SQL脚本文件的主要工具(类似于非PowerShell sqlcmd实用程序).我最近尝试了一些实验来确认Invoke-Sqlcmd处理Unicode并且有一些令人惊讶的结果.
我从这个简单的脚本文件(名为unicode.sql)开始:
CREATE TABLE #customers
( [IdCust] int,
[FirstName] nvarchar(25),
[SurName] nvarchar(25)
);
INSERT INTO #customers VALUES (4, N'Hans', N'Grüßner')
SELECT * FROM #customers;
DROP TABLE #customers;
Run Code Online (Sandbox Code Playgroud)
请注意,例如,姓氏具有一些可能在德语名称中找到的典型Unicode字符.
SQL Server Management Studio:输出到网格或文本时正确呈现,例如
IdCust FirstName Surname
----------- ------------------------- -------------------------
4 Hans Grüßner
Run Code Online (Sandbox Code Playgroud)
sqlcmd实用程序:正确呈现是从DOS shell还是PowerShell运行,例如
C:\> sqlcmd -S .\SQLEXPRESS -i unicode.sql
IdCust FirstName Surname
----------- ------------------------- -------------------------
4 Hans Grüßner
Run Code Online (Sandbox Code Playgroud)
PowerShell Invoke-Sqlcmd:呈现不正确(无论是如下所示输出为文本还是通过管道输出到Out-Gridview):
PS> Invoke-Sqlcmd -Server .\sqlexpress -InputFile unicode.sql
IdCust FirstName …
Run Code Online (Sandbox Code Playgroud) 我有一个WCF服务,实现了两个服务合同......
public class MyService : IService1, IService2
Run Code Online (Sandbox Code Playgroud)
我自我托管服务......
host = new ServiceHost(typeof(MyService));
Run Code Online (Sandbox Code Playgroud)
当服务只实现一个服务合同时,一切都工作正常,但是当我尝试设置autofac以便像这样注册时:
host.AddDependencyInjectionBehavior<IService1>(_container);
host.AddDependencyInjectionBehavior<IService2>(_container);
Run Code Online (Sandbox Code Playgroud)
...它在第二个引发异常,报告:
该值无法添加到集合中,因为该集合已包含相同类型的项:'Autofac.Integration.Wcf.AutofacDependencyInjectionServiceBehavior'.此集合仅支持每种类型的一个实例.
乍一看,我认为这是说我的两个合同在某种程度上被视为相同的类型,但在二读时我相信它是说AutofacDependencyInjectionServiceBehavior是有问题的类型,即我不能使用它两次!
然而,我发现这篇文章明确地显示了以稍微不同的形式多次使用它:
foreach (var endpoint in host.Description.Endpoints)
{
var contract = endpoint.Contract;
Type t = contract.ContractType;
host.AddDependencyInjectionBehavior(t, container);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给出了相同的错误消息.
是否可以在一项服务上注册多个服务合同,如果是,如何?
在我掌握Windows中用户模仿的细微差别的过程中,我首先遇到了一个关于冒充远程数据库的问题(请参阅此SO问题),但我终于弄明白了.我的下一个障碍是撤消/取消/恢复(选择你最喜欢的动词)模仿.
我尝试了几个不同的模拟库,这对我来说是可信的:
结果与两个库相同.最佳实践要求使用LOGON32_LOGON_NEW_CREDENTIALS登录类型(请参阅Windows API LogonUser函数)进行远程数据库连接.当我这样做时,这是我的示例代码产生的:
// SCENARIO A
BEGIN impersonation.
Local user = MyDomain\MyUser
DB reports: MyDomain\ImpersonatedUser
END impersonation.
Local user = MyDomain\MyUser
DB reports: MyDomain\ImpersonatedUser << NOT EXPECTED HERE!!
Run Code Online (Sandbox Code Playgroud)
我找到的唯一解决方法是使用LOGON32_LOGON_INTERACTIVE登录类型,然后我得到:
// SCENARIO B
BEGIN impersonation.
Local user = MyDomain\ImpersonatedUser << EXPECTED, BUT NOT WANTED!
DB reports: MyDomain\ImpersonatedUser
END impersonation.
Local user = MyDomain\MyUser
DB reports: MyDomain\MyUser
Run Code Online (Sandbox Code Playgroud)
从WindowsImpersonationContext.Undo方法的简洁描述来看,它似乎应该在方案A中起作用.
是否可以使用LOGON32_LOGON_NEW_CREDENTIALS登录类型进行恢复?
我已经使用Fitnesse.NET一段时间了,现在我正在尝试升级到更新的fitSharp引擎.我立刻遇到了障碍.从一个新系统开始,我下载了最新的fitnesse.jar并执行/安装它; 我的所有测试页面都在浏览器中显示正常.
当我将fitSharp的配置添加到根页面时,会出现此问题.我尝试了各种设置TEST_RUNNER和COMMAND_PATTERN的组合; 最终结果始终是,在执行任何测试时,fitnesse服务器从未将结果返回给我的浏览器.这里的参考是我的根内容,确认这些变量定义存在且正确,至少根据fitSharp 配置页面:
variable defined: TEST_RUNNER=fitSharp\RunnerW.exe
variable defined: COMMAND_PATTERN=%m -r fitnesse.fitserver.FitServer,fitSharp\fit.dll %p
Run Code Online (Sandbox Code Playgroud)
我终于找到一个故障排除说明,提到RunnerW提供了一些诊断信息,所以我切换到它并收到此错误消息,表明它显然是由于.NET 4引起的问题:
无法加载文件或程序集'file:/// C:\ fitnesse\fitSharp\fit.dll'或其依赖项之一.不支持操作.(来自HRESULT的异常:0x80131515)文件名:'file:/// c:\ fitnesse\fitsharp\fit.dll'---> System.NotSupportedException:尝试从网络位置加载程序集导致程序集在以前版本的.NET Framework中被沙箱化.此版本的.NET Framework默认情况下不启用CAS策略,因此此负载可能很危险.如果此负载不是用于沙盒装配,请启用loadFromRemoteSources开关.有关 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=155569.
引用的MSDN页面说我在配置文件中需要这个:
<configuration>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
所以看起来我有三种可能性.在那儿:
建议将不胜感激!
2010.01.17编辑:我在我的环境中使用的是fit协议而不是slim协议.
c# ×5
powershell ×2
sql-server ×2
winforms ×2
.net ×1
appsettings ×1
arrays ×1
attributes ×1
autofac ×1
c#-6.0 ×1
fitnesse ×1
fitsharp ×1
mercurial ×1
metadata ×1
null ×1
sqlcmd ×1
tortoisehg ×1
unicode ×1
wcf ×1
windows ×1