C# 将参数值转换为字符串?

C# 将参数值转换为字符串?,c#,visual-studio,C#,Visual Studio,好吧,我相信我不是唯一一个对此感到疑惑的人= 简而言之,是否可以使用VisualStudio转换: string a1, string a2, string a3, string a4, string a5, string a6 像这样的字符串排序: "'value1', 'value2', 'value3', 'value4', 'value5', value6'" 不用担心确切的格式,我自己可以处理 背景: 我经常有一些函数调用接受大量参数的存储过程,有时需要调试来构建exec dbo

好吧,我相信我不是唯一一个对此感到疑惑的人=

简而言之,是否可以使用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。当我需要调试一个函数时,我会在其中一个函数中插入一个分隔符,以查看它将传递给数据库的内容。这就是运行时。当它到达断点时:

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多个参数。

这就是你想要的吗

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

我应该指出,向DB发送这样的字符串可能会导致

备选案文2:

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

创建断点 右键单击红点->点击时。 在新屏幕中,选中“打印消息”复选框 在文本框中,从上方键入字符串.Format,但两边各有一个花括号: {String.Format….}


有关您可以在该消息中打印的参数的详细信息:

调试时,您可以在visual studio的即时窗口中运行代码。

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

string completeString = String.Join(", ", a1, a2, a3, ... ,aN);
它有5个不同的重载。Joinstring分隔符,params对象[]值


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

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

var a = new string[] { a1, a2, a3... };
然后通过以下方式将其值转换为字符串:

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

无论如何,我建议对存储过程使用参数。上述技巧在生成sql查询时并不干净,因为它可能导致sql注入。

如果运行sql探查器,它将向您显示包含所有所需信息的EXEC语句。您将不得不考虑探查器中的哪些选项最适合您,但通常情况下,如果您使用TSQL_SPs模板,它会为您提供所需的信息


当然,这种方法的局限性在于,只有在进行存储过程调用之后才能获取字符串,因此,如果在代码中设置断点,则必须在调用SQL Server之后才能获取该字符串。

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

public static void MethodCreatedByLINQ2Sql(params string[] list)
{
    //And then very simply use String.Join()
    string s = String.Join(",", list);
}

您听说过列表吗?您不应该将SQL查询构建为字符串。您应该使用参数化查询。使用exec尤其危险,应尽可能避免使用。您的方法最终肯定会生成要执行的SQL字符串吗?如果您只是希望获得发送到SQL server的实际原始查询,那么将探查器附加到SQL实例可能会产生更好的结果。不管代码中发生了什么,它都会准确地向您显示SQL实例接收到的内容。您是指在设计时还是在运行时?我会提醒您,最好的重载直到.NET 4才出现。通过使用分隔符,您还可以添加包含每个值的单引号。@chaospanion有趣,我不知道。对不起,布拉克,但这正是我想要避免的。我希望有一些命令,我可以运行也许使用反射器??如果我在任何给定函数上设置断点,我可以打印当前以字符串形式传递给该函数的带分隔符的值列表。您提供的格式将很酷。您可以执行以下操作:创建断点,右键单击红点->点击时。在新屏幕中选中“打印消息”复选框,然后在文本中键入上面的字符串.Format,但每边都有一个大括号:{String.Format…}如果这是您想要的,请告诉我,我会更新答案。这将打印到中间屏幕…首先,点击时。。这个选项很酷——我不知道它的存在,所以我玩了一下。问题1是我仍然必须键入参数列表或从函数中复制参数列表,粘贴它,删除数据类型。。。。。。问题2此选项不在VS2010 Express中。这也许是最接近的解决方案。这不是我想要的,但它现在会起作用。谢谢你,伙计。
右-我希望在即时窗口中可以生成传递给函数的带分隔符的值字符串;不知道怎么做,你怎么能做到?你说在即时窗口中运行代码是什么意思?我发现了这篇文章,并使用了类似myFunction.Method.GetParameters的东西-它将列出你的函数和数据类型列表。在同一篇文章中,有人建议使用myFunction.Method.GetParameters[index].Name,但这对我不起作用。也许有什么原因?我认为只有在访问托管堆栈时才能获得参数值。我认为只有利用诸如SOS之类的advantage调试器扩展才有可能