2012-03-12 70 views
0

我最近已经跳入SQL中的参数化查询。我现在正在执行查询时收到有关日期的投诉如何获得包括参数的完整sql查询

日历System.Globalization.GregorianCalendar中不支持该字符串表示的DateTime。

当我查询我得到的参数化查询字符串

SELECT * FROM Table WHERE field = @p_param 

我需要什么,以便调试该得到的是

SELECT * FROM Table WHERE field = "2012-03-12 14:09:00" 

如何在地球上我做到这一点?我怀疑这件事很简单,但我看不到它!

日期时间参数被添加了以下内容:

sql2.Parameters.Add("@p_UpdateTime", SqlDbType.DateTime).Value = DateTime.Parse(updateTime); 

和正常运行时间正在与

String updateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ff"); 
+0

什么是你的命令是什么样子? – 2012-03-12 14:13:28

+0

发布设置查询的代码,然后发布如何打印完整查询。从它的外观来看,你可能已经意外地把p_param变量作为一个字符串包含进去了? – BoredAndroidDeveloper 2012-03-12 14:14:51

+1

重点是:SQL命令是**从不**转换为您期望的第二个字符串!带参数的SQL命令与参数列表一起发送到SQL Server。参数值是**从不**实际上作为字符串替换为SQL命令 - 因此您无法获得该表示 - 它永远不会存在! – 2012-03-12 14:15:11

回答

-1

我现在已经修好了,我用的是FF为秒的时候,我需要使用SS

+0

谁曾将此标记为-1请说明原因!这是导致问题的问题,因为我最终发现了它:( – Neo 2012-03-13 15:18:18

+0

您应该将此标记为已接受的答案。 – 2012-04-02 12:57:27

+0

Thansk Martin我认为我有:S – Neo 2012-04-05 14:36:45

0

设置您可以将参数转换是这样的:

CONVERT(VARCHAR(19), @p_param, 120) 

哪里120是yyyy-mm-dd hh:mi:ss(24h)的转换码。

+0

遗憾没有工作 – Neo 2012-03-12 14:30:15

1

使用SQL Server Profiler(随所有sql服务器一起提供)。它会显示发送给SQL服务器的完整命令。

+0

我一直跑到一个查询来获取最近跑的查询,以引导的任何环节为使用Profiler来得到查询? – Neo 2012-03-12 14:20:17

+0

我总是去开它,启动沼泽标准跟踪,执行程序,直到刚才的查询,然后暂停跟踪。查询通常是最新的或其中之一。 – 2012-03-12 14:42:35

1

打开Sql Server Profiler并跟踪对Sql Server执行的操作。关于如何使用该工具,请参阅基本的tutorial

+0

它显示在工具下的选项j不存在于服务器2005 sql管理中,也不在我的2010版本管理之下 – Neo 2012-03-12 14:23:17

+0

查看[MSDN](http://msdn.microsoft.com/zh-cn/library/ms181091 (v = sql.90).aspx)如何打开它。 – RePierre 2012-03-12 14:30:48

0

它看起来像你发送的字符串值。这是由于DateTime.Format根据当前的线程文化而变化的问题。

传入参数时尝试是这样的:

DateTime dateParam = GetDateParam(); 

_sqlCommand.Parameters.Add(
    new SqlParameter 
    { 
     DbType = DbType.Date, 
     ParameterName = "@p_param", 
     Value = dateParam 
    }); 
相关问题