Windows Azure存储过程未执行

时间:2013-09-18 11:39:53

标签: c# sql sql-server stored-procedures azure

我的问题如下:我有一个使用少量存储过程的站点,所有这些在我的本地开发环境中都可以正常工作。

但是,这些存储过程中的一个要么未被触发,要么在发布到Windows Azure后失败。

我与数据库的连接很好,因为网站的其他部分正常运行,我使用fiddler来检查post事件是否正在传递正确的数据 - 这就是它。

我已经进入Azure数据库并查看了存储过程并且它看起来都很好,我甚至使用Azure工具对其进行了测试 - 我可以传入数据并且执行时没有问题。

所以我很难知道我还能做些什么来找出造成这个问题的原因。

我做的最后一件事是仔细检查我的本地副本,然后将其重新发布到Azure。

存储过程:

BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

 -- Insert statements for procedure here
 INSERT INTO [dbo].[Events] ([Type] ,[StartDate]) VALUES (@Type, @StartDate)
END

2 个答案:

答案 0 :(得分:0)

您对存储过程的运行情况有多确定?有三种可能的结果:你的代码没有调用proc,proc运行但抛出了你没有捕获的错误,或者proc运行成功。

运行代码后尝试运行以下语句,以验证proc是否未运行。它取自MSDN。它不会向您显示对proc的调用,但它将显示在其中调用的语句。确保在测试之前和之后运行此语句。如果你没有看到你的proc正在运行的语句,它可能没有被调用。我会在proc的顶部添加一个SELECT 0作为令牌,以便在INSERT语句失败的情况下在下面的输出中查找(在这种情况下它可能不会显示在下面)。

SELECT query_stats.query_hash AS "Query Hash", 
    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
    MIN(query_stats.statement_text) AS "Statement Text"
FROM 
    (SELECT QS.*, 
    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
    ((CASE statement_end_offset 
        WHEN -1 THEN DATALENGTH(ST.text)
        ELSE QS.statement_end_offset END 
            - QS.statement_start_offset)/2) + 1) AS statement_text
     FROM sys.dm_exec_query_stats AS QS
     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;

答案 1 :(得分:0)

找到此问题的原因 - 仍然可以找到解决方法。

问题不在于商店程序,因为由于输入,网站和最终数据库之间的文化不匹配而没有调用。

在我的所有测试中,我传递的是英国日期格式(使用日期dd / mm / yyyy的正确方法),这意味着我的模型有效,但是当部署到azure(在EU服务器上)时,日期格式是它预计是美国(不是使用日期的正确方法mm / dd / yyyy!)

因此,以下代码正在完成其工作并将我重定向回当前页面。

if (ModelState.IsValid)
  {
    database.SaveNewEvent(model);
  }
return Redirect.....

一旦我注释掉这行代码,我就得到了真正的错误,现在可以考虑改变我的网站和数据库的文化,以使用真实的日期格式。

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

感谢大家帮我解决这个问题:)

相关问题