Windows Azure 存储过程未执行
本文关键字:执行 存储过程 Azure Windows | 更新日期: 2023-09-27 18:31:42
我的问题是:我有一个使用少量存储过程的网站,所有这些存储过程在我的本地开发环境中都可以正常工作。
但是,其中一个存储过程要么未被触发,要么在发布到 Windows Azure 后失败。
我与数据库的连接很好,因为网站的其他部分功能正常,我使用小提琴手检查 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
存储过程未运行的程度如何?有三种可能的结果:您的代码未调用 proc,proc 运行但抛出您未捕获的错误,或者 proc 成功运行。
尝试在运行代码后运行以下语句,以验证进程是否未运行。它取自MSDN。它不会显示对 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;
找到此问题的原因 - 仍然需要找到修复程序。
问题不在于存储过程,因为由于输入、站点和最终数据库之间的区域性不匹配,因此未调用此过程。
在我的所有测试中,我都以英国日期格式(使用日期 dd/mm/yyyy 的正确方法)通过,这意味着我的模型是有效的,但是当部署到 Azure(在欧盟服务器上)时,它期望的日期格式是美国(不是使用日期的正确方式 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.
感谢大家如何帮助我解决这个问题:)