简而言之,是否可以使用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
}
我想以某种方式(不必指定每个参数),打印出我可以剪切的分隔字符串&amp;粘贴到SSMS2008(试图节省时间)以构建像这样的字符串
exec dbo.mystoredprocedure [['value1', 'value2', 'value3'......]] <--- pasted value from VisualStudio
不,我不是在尝试SQLInjections或类似的东西。我只是想节省时间 - 其中一些SP有20多个参数。
答案 0 :(得分:3)
这就是你要追求的吗?
String paramStr = String.Format("'{0}', '{1}', '{2}', '{3}', '{4}'", a1, a2, a3,a4,a5);
我应该指出,将这样的字符串发送到数据库可能会产生SQL Injection
选项2:
要打印到中间窗口,您可以使用此技巧:
{ String.Format(.....) }
有关您可以在该消息中打印的参数的更多信息:http://msdn.microsoft.com/en-us/library/232dxah7.aspx
答案 1 :(得分:2)
我认为最好的方法是在方法中使用params
来使其更简单:
public static void MethodCreatedByLINQ2Sql(params string[] list)
{
//And then very simply use String.Join()
string s = String.Join(",", list);
}
答案 2 :(得分:0)
您可以在调试时在visual studio的即时窗口中运行代码。
答案 3 :(得分:0)
String.Join()
允许您连接任意数量的字符串,如下所示:
string completeString = String.Join(", ", a1, a2, a3, ... ,aN);
这个重载(它有5个不同的重载)是.Join(string separator, params object[] values)
当然,正如已经指出的那样,当你必须使用EXEC
时,应该避免这种情况,尤其是。参数化查询是非常可取的(但完全是另一个主题,另外你可以很容易地找到围绕SO本身的很多例子。)
答案 4 :(得分:0)
在字符串数组中有a1,a2:
var a = new string[] { a1, a2, a3... };
然后将这些值转换为字符串:
var v = string.Join("','", a);
无论如何,我建议对你的存储过程使用Parameter。上面的技巧并不干净,因为它可以导致SQL注入。
答案 5 :(得分:0)
如果您运行SQL事件探查器,它将显示EXEC语句以及您需要的所有信息。您必须使用Profiler中哪些选项最适合您,但通常如果您使用TSQL_SPs模板,它应该为您提供您正在寻找的信息。
当然,对此的限制是在完成存储过程调用之前不会获取字符串,因此如果在代码中放置断点,则必须在调用SQL Server之后。