2

好吧,我敢肯定我不是唯一一个想知道这个的人=)

简而言之,是否可以使用 VisualStudio 进行转换:

string a1, string a2, string a3, string a4, string a5, string  a6

变成一个字符串,如下所示:

"'value1', 'value2', 'value3', 'value4', 'value5', value6'"

(不用担心确切的格式,我可以自己处理)?

背景:我经常有调用接受大量参数的存储过程的函数,有时(调试)我需要构建“exec dbo.storedprocname param1,param2 ....”字符串并直接针对服务器运行它。目前我必须手动构建字符串,我希望有一种简单的方法可以在 VisualStudio 的即时窗口中打印出来

编辑(根据大众需求):我正在使用 Linq2SQL(是的,我知道它已经过时了)并且里面有 100 多个 SP。当我需要调试一个函数时,我会在其中一个函数中设置一个中断,以查看它将传递给数据库的内容。所以这将是 RUNTIME。当它到达断点时:

public static void MethodCreatedByLINQ2Sql(string param1, string param2, string param3, ...)
{
    context.mystoredprocedure(param1, param2, param3...); //<---breakpoint
}

我想以某种方式(无需指定每个参数)打印出一个分隔字符串,我可以将其剪切并粘贴到 SSMS2008(试图节省时间)以构建这样的字符串

exec dbo.mystoredprocedure [['value1', 'value2', 'value3'......]] <--- pasted value from VisualStudio

不,我不想做 SQLInjections 或类似的事情。我只是想节省时间——其中一些 SP 有 20 多个参数。

4

6 回答 6

3

这就是你所追求的吗?

String paramStr = String.Format("'{0}', '{1}', '{2}', '{3}', '{4}'", a1, a2, a3,a4,a5);

我应该指出,将这样的字符串发送到数据库会导致SQL 注入

选项 2:

要打印到中间窗口,您可以使用以下技巧:

  1. 创建断点
  2. 右键单击红点->“当命中”。
  3. 在新屏幕中选择“打印消息”复选框
  4. 在文本框中键入上面的 String.Format,但每边都有一个花括号:

{ String.Format(.....) }

有关您可以在该消息中打印的参数的更多信息:http: //msdn.microsoft.com/en-us/library/232dxah7.aspx

于 2012-09-12T14:14:33.103 回答
2

我认为最好的方法是params在您的方法中使用以使其更简单:

public static void MethodCreatedByLINQ2Sql(params string[] list)
{
    //And then very simply use String.Join()
    string s = String.Join(",", list);
}
于 2012-09-12T14:42:43.677 回答
0

您可以在调试时在 Visual Studio 的即时窗口中运行代码。

于 2012-09-12T14:14:57.213 回答
0

String.Join()允许您连接任意数量的字符串,如下所示:

string completeString = String.Join(", ", a1, a2, a3, ... ,aN);

这个重载(它有 5 个不同的)是.Join(string separator, params object[] values)

当然,正如已经指出的那样,应该避免这种情况,尤其是当您必须使用EXEC. 参数化查询是非常可取的(但完全是另一个主题,而且您可以很容易地找到围绕 SO 本身的许多示例)。

于 2012-09-12T14:18:12.720 回答
0

在字符串数组中有 a1, a2 :

var a = new string[] { a1, a2, a3... };

然后以这种方式将它们的值转换为字符串:

var v = string.Join("','", a);

无论如何,我建议对您的存储过程使用 Parameter 。上面的技巧对于生成 sql 查询并不干净,因为它可能导致 SQL 注入。

于 2012-09-12T14:18:51.557 回答
0

如果您运行 SQL Profiler,它将向您显示 EXEC 语句以及您需要的所有信息。您将不得不尝试使用 Profiler 中的哪些选项最适合您,但通常如果您使用 TSQL_SPs 模板,它应该会为您提供您正在寻找的信息。

当然,对此的限制是,在进行存储过程调用之前,您不会获得字符串,因此如果您在代码中放置断点,则必须在调用 SQL Server 之后。

于 2012-09-12T14:21:55.447 回答