我想对给定SQL Server数据库中的所有存储过程运行标准grep(假设2005或更高版本).我找到了各种简单的查询来列出包含特定对象的存储过程的名称,例如
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%table_I_want_to_find%'
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是,像grep一样,列出已识别的存储过程中的特定行(所以我不必手动打开每一行,看看它是否是我正在寻找的).
我对T-SQL或PowerShell中的解决方案持开放态度,甚至是现成的实用程序.
我想知道下面的代码变体对性能的影响是复杂度.AngularJS已经解决了部分答案(那些使用属性):为什么ng-bind在角度上优于{{}}?但我想了解使用函数而不是属性的影响.
在我看来,当有一个变化时,Angular在某种意义上"知道"属性,而一个函数是不透明的,因此Angular不会知道,并且每次都必须进行评估.然而,根据上面提到的另一个SO问题,Angular已经在每次都使用直接模板进行评估.那么使用函数而不是属性真的会有任何性能损失吗?每种方法的优点和缺点是什么?
1直接模板与财产
<div>Hello, {{user.name}}</div>
Run Code Online (Sandbox Code Playgroud)
2 ng-bind-template with property
<div ng-bind-template="Hello, {{user.name}}"</div>
Run Code Online (Sandbox Code Playgroud)
3 ng-bind with property
<div>Hello, <span ng-bind="user.name"></span></div>
Run Code Online (Sandbox Code Playgroud)
4 具有功能的直接模板
<div>Hello, {{GetUserName()}}</div>
Run Code Online (Sandbox Code Playgroud)
带有功能的 5 ng-bind-template
<div ng-bind-template="Hello, {{GetUserName()}}"</div>
Run Code Online (Sandbox Code Playgroud)
6 ng-bind with function
<div>Hello, <span ng-bind="GetUserName()"></span></div>
Run Code Online (Sandbox Code Playgroud) 如果DataSet包含时间戳或其他二进制值的列,则在显示该列中的任何数据时,其关联的DataGridView将抛出ArgumentException.也就是说,假设您有一些包含二进制列的表,例如:
CREATE TABLE [dbo].[DataTest](
[IdStuff] INT IDENTITY(1,1) NOT NULL,
[ProblemColumn] TIMESTAMP NOT NULL )
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2008中,添加指向可疑表的新数据源.将表从数据源资源管理器拖到新WinForm的可视化设计器表面上,以自动创建DataGridView,BindingSource等.执行应用程序,您将获得运行时异常.听起来像是一个缺陷,对吧?
如果检查DataGridView的Columns集合,您会发现它将列类型设置为DataGridViewImageColumn.为什么?因为,根据微软的说法,.NET假定二进制列是图像.事实上,微软肯定这种行为是设计的!请参阅Microsoft Connect上的此缺陷报告:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx ?FeedbackID = 93639
可以通过处理DataGridView的DataError事件来抑制错误对话框,正如对话框礼貌地指出的那样,但这引出了问题.我想找到一种方法来避免首先出现错误.也就是说,我希望有一个DataGridViewTextColumn显示二进制数据的文本表示,例如"0x1234a8e9433bb2".我正在寻找一个通用的解决方案,因为我的实际代码不使用上面示例中的特定表.相反,我在dataAdapter.SelectCommand中添加了一些任意的查询,然后调用
dataAdapter.Fill(dataTable)
Run Code Online (Sandbox Code Playgroud)
自动生成我的dataTable.由于DataGridView有(恕我直言)错误,我想我需要检查数据表的列(即dataTable.Columns [n] .DataType.Name.Equals("Byte []")?)并在将dataTable连接到DataGridView之前手动将任何字节数组转换为其文本形式
bindingSource.DataSource = dataTable;
Run Code Online (Sandbox Code Playgroud)
那我的问题是:
是否有更简单或更优雅的方式在DataGridView中显示二进制列?
(请注意,VS 2005和VS 2008,.NET 2.0和.NET 3.5都存在此问题.)
我有热情元的查询,我的意思是回答问题的查询有关数据,而不是回答与数据.
在我得到许多合理的批评之前,我确实意识到元查询的方法并不理想,例如在这里雄辩地描述.不过,我相信他们确实有自己的位置.(以至于我创建了一个支持SQL Server,Oracle和MySql的参数化元查询的WinForms用户控件,并且我在Simple-Talk.com上发布的由三部分组成的系列中广泛描述了这个QueryPicker的设计和使用..)
我使用元查询的动机:
对于给定的数据库类型,当然还有其他(更好的?)方法来获取元信息.特别是SQL Server提供SQL Server Management Studio.Oracle和MySql工具似乎没有提供相同的用途.(我自由地承认,我用我的SQL-Server-lean-view of the universe来提出这个主张.:-)即使他们这样做了,也会有所不同 - 我希望跨数据库类型采用统一的方法.
您觉得哪些SQL Server,Oracle或MySql元查询有用?
第一个视图总结了我迄今为止按照数据库类型收集的内容(正如我所说,对SQL Server的权重很大).
Query SQL Server Oracle MySql DB Version yes yes yes Databases with properties yes yes Databases with space usage yes National Language Support yes Procedures and functions yes yes Primary keys yes yes Primary to …
我是一个广泛使用 WCF 的项目的新手,我对 WCF 的经验并不丰富。我正在尝试追踪一个问题,即我的 UI 在等待长时间运行的服务调用返回时在 10 分钟后出现超时错误。粗略地说,这是我的项目需要的内容:
[service A] <=> [service B] <=> [UI console]
Run Code Online (Sandbox Code Playgroud)
这是我迄今为止收集到的:
超时发生在 serviceA 和 serviceB 之间,而不是在 serviceB 和 UI 控制台之间,因为我实际上有两个单独的 UI 控制台:一个是 MMC 管理单元,一个是 PowerShell 管理单元,并且都表现出相同的 10 分钟超时.
我在 serviceA 和 serviceB 中的端点都使用 basicHttpBinding;两者都有 bindingConfigurations 指定 sendTimeout 和 receiveTimeout 为 30 分钟,而不是 10 分钟。
ReliableSession.InactivityTimeout 默认为 10 分钟我读过,但我不相信这些是 ReliableSession 所以它不适用。
我为 WCF 跟踪检测了 serviceB;ServiceTraceViewer 显示了在长时间运行的服务调用开始之前的适当活动,然后在 10 分钟超时(包括 10 分钟超时)之前没有显示。
随意挑战我的任何断言和/或让我知道我还能做些什么来诊断这个问题。
2013.04.04 更新
这是实际的错误消息:
请求通道在 00:09:59.9839984 之后等待回复时超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。分配给此操作的时间可能是较长超时的一部分。
服务器堆栈跟踪:在 …
从我在Windows上的用户模拟阅读中,应该正确使用LOGON32_LOGON_NEW_CREDENTIALS登录类型来模拟用户到数据库.使用马特约翰逊漂亮的冒充包装(最初发布在这里,然后擦亮了这里),我尝试测试了这一点-这里除了我的定义特定领域,USER,PWD和CONN_STRING常数我的整个程序.
using System;
using System.Data.SqlClient;
using SimpleImpersonation;
namespace ImpersonationDemo
{
class Program
{
private static SqlConnection _connection;
static void Main(string[] args)
{
using (Impersonation.LogonUser(
DOMAIN, USER, PWD, LogonType.NewCredentials))
{
GetOpenConnection();
CheckDbCredentials();
CloseConnection();
}
Console.WriteLine("Press return to exit");
Console.ReadLine();
}
private static void CheckDbCredentials()
{
using (
var command = new SqlCommand(
"SELECT nt_user_name, SUSER_SNAME() "
+"FROM sys.dm_exec_sessions WHERE session_id = @@SPID",
_connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0}, {1}",
reader.GetString(0), reader.GetString(1)); …Run Code Online (Sandbox Code Playgroud) 这个问题类似于使用powershell将空参数传递给可执行文件,但我想扩展问题和答案并更好地理解"为什么",因为它似乎是一个PowerShell陷阱.
如果加载PSCX并运行echoargs(外部命令,即exe文件),您可以看到跳过空字符串参数:
PS> echoargs word "two words" "" 123
Arg 0 is <word>
Arg 1 is <two words>
Arg 2 is <123>
Run Code Online (Sandbox Code Playgroud)
但是如果你使用"CMD escape"(--%),你可以使它显示为"正确":
PS> echoargs --% word "two words" "" 123
Arg 0 is <word>
Arg 1 is <two words>
Arg 2 is <>
Arg 3 is <123>
Run Code Online (Sandbox Code Playgroud)
类似地,如果编写PowerShell函数,则正确处理空字符串:
PS> Show-Args word "two words" "" 123
Arg 0 is <word>
Arg 1 is <two words>
Arg 2 is <>
Arg 3 …Run Code Online (Sandbox Code Playgroud) 这个问题与我在 StackOverflow 上找到的其他几个问题类似,但这些差异对我来说足够重要,值得提出一个新问题,所以这里是:
我想从Oracle中的动态SQL获取一个结果集,然后将其作为结果集显示在类似SqlDeveloper的工具中,就像我直接执行动态SQL语句一样。这在 SQL Server 中很简单,所以具体来说,下面是 SQL Server 中的一个示例,它在 SQL Server Management Studio 或查询资源管理器中返回结果集:
EXEC sp_executesql N'select * from countries'
Run Code Online (Sandbox Code Playgroud)
或者更恰当地说:
DECLARE @stmt nvarchar(100)
SET @stmt = N'select * from countries'
EXEC sp_executesql @stmt
Run Code Online (Sandbox Code Playgroud)
问题“如何从执行动态 SQL 的 Oracle PL/SQL 匿名块返回结果集/游标?” 解决了问题的前半部分——在游标中执行动态 SQL。问题“如何使Oracle过程返回结果集”提供了类似的答案。网络搜索揭示了同一主题的许多变体,所有这些都只解决了我问题的前半部分。我发现这篇文章解释了如何在 SqlDeveloper 中执行此操作,但这使用了 SqlDeveloper 的一些功能。我实际上使用的是自定义查询工具,因此我需要将解决方案独立于 SQL 代码中。该自定义查询工具同样不具备显示 print (dbms_output.put_line) 语句输出的功能;它只显示结果集。这是使用“立即执行...批量收集”的另一种可能途径,但此示例再次使用 dbms_output.put_line 语句循环呈现结果。此链接试图解决该主题,但该问题也从未得到完全解答。
假设这是可能的,我将添加一个条件:我想在不必定义函数或过程的情况下执行此操作(由于数据库权限有限)。也就是说,我想执行一个包含动态 SQL 的独立 PL/SQL 块,并在 SqlDeveloper 或类似工具中返回结果集。
总结一下:
我非常喜欢 LINQPAD 的惊人功能(感谢Joseph Albahari!),尤其是 LINQPad 的Dump方法。我经常将现有的 Visual Studio 项目移至 LINQPad,其唯一目的是添加几个 Dump 语句来查看数据的样子 - 尽管 Visual Studio 的数据弹出窗口确实很有用,但 Dump 输出更容易理解。为此,我打开当前项目中需要的每个文件,将各个类复制并粘贴到 LINQPad,添加程序集和 using 语句,尝试运行,以便 LINQPad 告诉我错过了什么,然后重复直到找到所有内容孤儿参考文献。
这种方法似乎与 LINQPad 优雅、精简的本质背道而驰。有更容易的方法吗?很快有机会在 LINQPad 的文件菜单上看到“导入项目”吗?如果没有,我最终可能会自己编写一个实用程序......
我最近尝试使用selenium RC的GetAttribute方法,但立即遇到了挑战.我试图执行一个非常简单selenium.GetAttribute("//a/@href")但代码抛出一个SeleniumException,消息"错误:无法找到元素属性:// a/@ href".通过替换selenium.GetText("//a[@href]")代替的的getAttribute电话,我确认了一个元素肯定存在,因为这种说法正确的返回链接的文本.
然后我尝试了:
selenium.GetAttribute("document.getElementsByTagName('a')[0].getAttribute('href')")- 同样的问题; 稍有不同的错误消息(并且错误消息缺少最后的括号): "错误:元素document.getElementsByTagName('a')[0] .getAttribute('找不到'href'.请注意,这个确切的表达式在Firebug中正常工作安慰.selenium.GetText("xpath=/html/body/a[@href]")用来确认存在然后selenium.GetAttribute("xpath=/html/body/a/@href")获取属性 - 它工作了!虽然手册明确指出相对 xpath定位器不需要显式定位器类型(即"xpath ="前缀),但它对绝对 xpath定位器保持沉默; 我从中解释说前缀是必需的.但出于好奇,我回到了我的相对表达并添加了显式前缀 - 更改selenium.GetAttribute("//a/@href")为selenium.GetAttribute("xpath=//a/@href")- 这也有效!
最后,我在Selenium IDE中使用非常方便的" 查找"按钮进行的实验表明,它可以很好地处理元素,但是会失败并带有属性.我可以理解,突出属性没有意义,因为属性不是可见的页面元素,但为什么不突出显示包含属性的元素,并使其以不同的颜色?也许不是一项微不足道的任务......
我将上述实验的结果归结为这些问题; 这是我在这里发布的全部目的!这些似乎对我来说都是一个错误,但如果您认为我的使用不正确或有解决方法,请告诉我:
"xpath=//a/@href"定位器,按下查找按钮会产生这个丑陋的消息:"找不到[错误]定位器:xpath = // a/@ href,error = [Exception ..."无法转换JavaScript参数arg 0 [inIFlasher.scrollElementIntoView …sql-server ×3
c# ×2
oracle ×2
powershell ×2
angularjs ×1
binary-data ×1
command-line ×1
datagridview ×1
dom ×1
dynamic-sql ×1
executable ×1
grep ×1
javascript ×1
linqpad ×1
mysql ×1
ng-bind ×1
resultset ×1
selenium-rc ×1
sql ×1
timeout ×1
wcf ×1
windows ×1
xpath ×1