在我编写的iPhone应用程序中,我连接到用于执行SQL Server存储过程的Web服务。我发送了一些简单的查询,它工作正常。将存储过程转换为NSString的问题
我尝试了一些简单的存储过程,是的,它再次运行良好。问题在于这个特定的存储过程转换为NSString。我意识到我缺少为某些特定字符添加转义字符。我为方括号'[]'和'%'添加了转义字符。我说转义字符是问题,因为执行后得到的错误是说'存储过程中的语法错误'。
但是,当我直接在数据库中执行此操作(即通过SQL命令行客户端本地执行)时,我没有收到任何错误......它工作正常。所以,将它转换为NSString似乎是个问题。请帮忙。
DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info);
SELECT TOP(10) SQLProcessUtilization AS \\[SQL Server Process CPU Utilization\\],
SystemIdle AS \\[System Idle Process\\],
100 - SystemIdle - SQLProcessUtilization AS \\[Other Process CPU Utilization\\],
DATEADD(ms, -1 * (@ts_now - \\[timestamp\\]), GETDATE()) AS \\[Event Time\\]
FROM (
SELECT record.value('(./Record/@id)\\[1\\]', 'int') AS record_id,
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)\\[1\\]', 'int')
AS \\[SystemIdle\\],
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)\\[1\\]',
'int')
AS \\[SQLProcessUtilization\\], \\[timestamp\\]
FROM (
SELECT \\[timestamp\\], convert(xml, record) AS \\[record\\]
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record LIKE '%%<SystemHealth>%%') AS x
) AS y
ORDER BY record_id DESC;
我得到一个错误提示语法错误。我看了这个存储过程成的NSString对象,然后发送的NSString Web服务这样的:
NSError *error;
NSString *txtFilePath = [[NSBundle mainBundle] pathForResource:@"Proc_Usage" ofType:@"txt"];
NSString *procUsage = [NSString stringWithContentsOfFile:txtFilePath encoding:NSUTF8StringEncoding error:&error];
if (procUsage == nil) {
return -1;
}
[[DbConnect DbConnect_Singleton] executeInDb:procUsage];
你不检查你收到你的服务器上的,你执行有什么?原来的SQL和你在服务器上使用的东西之间的区别应该相当简单。 – 2013-05-05 12:49:01
我确实试着去看。但SQL Server日志(在Management Studio中)只列出本地执行的查询(尝试在系统表中搜索也是徒劳)。 – Jean 2013-05-05 15:53:34