我确信可以分析Enterprise Library SQL命令,但我无法弄清楚如何包装连接.这就是我想出的:
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand(PROC);
ProfiledDbCommand cmd = new ProfiledDbCommand(dbCommand, dbCommand.Connection, MvcMiniProfiler.MiniProfiler.Current);
db.AddInParameter(cmd, "foo", DbType.Int64, 0);
DataSet ds = db.ExecuteDataSet(cmd);
Run Code Online (Sandbox Code Playgroud)
这导致以下异常:
无法将类型为"MvcMiniProfiler.Data.ProfiledDbCommand"的对象强制转换为"System.Data.SqlClient.SqlCommand".
我有一个网站,在远程服务器上使用MSMQ来排队待处理的电子邮件.我能够将消息写入队列,然后在队列上调用dispose.队列仍然获取消息,但稍后GC出现并尝试清理它会导致IIS崩溃.这是我在事件日志中看到的:
例外:
System.NullReferenceException消息:对象引用未设置为对象的实例.
堆栈跟踪:
at System.Messaging.Cursor.Finalize()
这段代码运行良好多年,但最近才开始表现.我已重新启动所有服务器以对其进行故障排除,但这没有用.
编辑1
这是发送消息的代码.QueueFactory只是一个单独的锁定创建一个MessageQueue.
using (System.Messaging.MessageQueue queue
= QueueFactory.Instance.BuildQueue(this.Path))
{
System.Messaging.Message message = new System.Messaging.Message
{
Body = body,
Formatter = new BinaryMessageFormatter(),
TimeToBeReceived = this.ExpirationMinutes
};
queue.Send(message, label);
}
Run Code Online (Sandbox Code Playgroud)
try-catch这个代码周围有一个,我知道它永远不会进入这个代码catch块.我开始认为这是整个应用程序从.NET 3.5升级到.NET 4.0时引起的.然而,它偶尔会开始发生,但现在每次我向队列写一条消息时都会发生这种情况.
编辑2
这是代码 BuildQueue
lock (lockHandler)
{
return new System.Messaging.MessageQueue(queuePath);
}
Run Code Online (Sandbox Code Playgroud) 我有一个表,它有一个日期时间列,我希望同时将多条记录插入其中。日期时间必须完全相同,以便我可以延迟比较哪些记录插入在一起。做这样的事情是否足够:
INSERT INTO Table(Date, ID, etc...)
VALUES (GETDATE(), ...)
Run Code Online (Sandbox Code Playgroud)
或者我应该在存储过程中更早地声明一个变量来保存当前时间并将其用作要插入的值。
我已经测试过,似乎第一种方法效果很好,我只想 100% 确定。
编辑:我认为这个问题最好表述为“在存储过程中执行 GETDATE() 的频率是多少?”