我们的应用程序是Windows服务(用C++编写的本机.EXE),它调用SQL Server中的存储过程.在大多数情况下,存储过程中的错误(在90%的情况下,这些错误意味着我们的业务逻辑中存在错误)被重新抛出作为异常并被我们的服务捕获.然后,它们将在运行我们服务的计算机上的应用程序事件日志中登录.
但是,我现在需要在存储过程中记录SQL Server本身的一些错误.
遵循我们用于服务的范例,我想我可以使用xp_logevent在事件日志中保存错误信息.
这是记录SQL Server错误的推荐方法吗?
FWIW我使用的是SQL Server 2008
我希望能够创建一个包含多个事件的ICS文件,用户可以在其默认的 Exchange日历中导入这些事件.我需要支持Outlook桌面客户端,Office 365 Web界面和Apple iPhone Mail/Calendar.
请注意,只有包含多个事件的ICS文件才会出现此问题.单事件ICS按预期工作.
以下多事件ICS文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//bobbin v0.1//NONSGML iCal Writer//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART:20180327T080000Z
DTEND:20180327T110000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003a@yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 1
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 1
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20180328T120000Z
DTEND:20180328T130000Z
DTSTAMP:20091130T213238Z
UID:1285935469767a7c7c1a9b3f0df8003b@yourserver.com
CREATED:20091130T213238Z
DESCRIPTION:Example event 2
LAST-MODIFIED:20091130T213238Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Example event 2
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
在Office 365 Web界面和Apple iPhone Mail/Calendar中正常工作.但是,当它在Outlook 2016中导入时,它会创建一个新的"无标题"日历并将事件放入其中而不是默认用户日历.
这似乎是之前在SO上引用的一个已知问题:
答案的范围从"它无法完成"到相反的范围.
第一个链接中的一个帖子提到X-WR-CALNAME从ICS 中删除 修复了该问题.我从未在ICS开始这样做过.
同一页面上的另一篇文章提到添加X-WR-RELCALID:XXXXXX修复它.我试过把它放入其中并没有任何区别.我不确定X-WR-RELCALID的值是否应设置为特定的值 - 我只是将其设置为某个GUID.
如果有人成功解决了这个问题 - 您是否可以发布ICS示例以及它使用的Outlook版本?
考虑以下appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"NumberOfRetries": 5,
"Option1": "abc",
"Option2": "def"
}
Run Code Online (Sandbox Code Playgroud)
为了读取NumberOfRetries以下类可以成功使用:
public class AppSettings
{
public int NumberOfRetries { get; set; }
public string Option1 { get; set; }
public string Option2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs 中包含以下代码:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this …Run Code Online (Sandbox Code Playgroud) 我编写了一个使用此函数调用连接到本地队列管理器的应用程序:
MQQueueManager mqQMgr = new MQQueueManager("QM_QueueManagerName");
Run Code Online (Sandbox Code Playgroud)
现在我需要连接到另一台计算机上的远程队列管理器.
我可以使用MQ Explorer从我的开发PC使用QM_ComputerName队列管理器名称,S_ComputerName通道和ComputerName作为连接名称成功连接到远程队列管理器.所以可以从我的桌面访问它.
但是,当我尝试通过.Net连接时,MQRC_Q_MGR_NAME_ERROR无论我尝试什么,我都会得到.
我试过指定
MQEnvironment.Hostname = "ComputerName";
MQEnvironment.Channel = "S_ComputerName ";
and then calling
mqQMgr = new MQQueueManager("QM_ComputerName");
I also tried calling
mqQMgr = new MQQueueManager("QM_ComputerName", "S_ComputerName", "ComputerName");
Run Code Online (Sandbox Code Playgroud)
我在两种情况下都会出错.
有人可以提供建议吗?
假设我有指定的开发环境的appsettings.Development.json连接字符串和指定的登台环境的连接字符串appsettings.Staging.json
在开发和暂存之间切换我需要做的就是导航到项目属性中的 Visual Studio 调试选项卡并更改ASPNETCORE_ENVIRONMENT环境变量的值。
现在,appsettings.*.json出于安全原因,我当然不想有连接字符串。所以我把它移到了 User Secrets。
问题是 - 似乎secrets.json所有环境都使用一个文件。没有secrets.Development.json或secrets.Staging.json。这意味着在我通过 Visual Studio Debug 选项卡从 Development 切换到 Staging 环境之后,我还需要手动更改连接字符串,secrets.json这违背了为环境提供内置支持的目的。
在每个环境的基础上不支持用户机密是否正确?如果是这样 - 是否有另一种方法可以避免在切换环境时手动修改 Secret 连接字符串?
我正在重新设计使用iText 1.4.6.2的传统ASP.Net Web窗体应用程序
新的应用程序将使用ASP.Net MVC,但我不清楚更新版本的iText组件.
在NuGet存储库中有iTextSharp 5.5.10(Bruno Lowagie等人)和iText 7.0.1(iText软件).这两个包之间有什么关系/区别(最近都更新了)?
其他问题:
什么推荐用于新开发?
什么版本需要使用iText 1.4.6.2对遗留PDF生成代码进行最少的更改?
我在ASP.NET应用程序中有以下C#代码:
string script = @"alert('Message head:\n\n" + CompoundErrStr + " message tail.');";
System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Test", script, true);
Run Code Online (Sandbox Code Playgroud)
CompoundErrStr是SQL Server生成的错误消息(从存储过程冒出的异常文本).如果它包含任何表列名,则它们用单引号括起来,并在执行期间中断JavaScript,因为单引号被视为字符串终止符.
作为单引号的修复,我将代码更改为:
CompoundErrStr = CompoundErrStr.Replace("'", @"\'");
string script = @"alert('Message head:\n\n" + CompoundErrStr + " message tail.');";
System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Test", script, true);
Run Code Online (Sandbox Code Playgroud)
它现在工作正常.
但是,还有其他特殊字符需要像这样转义吗?是否有可用于此目的的.Net功能?类似于HttpServerUtility.HtmlEncode的东西,但是用于JavaScript.
编辑我使用.Net 3.5
我将 Entity Framework Core 3.1.8 与 SQL Server 2016 结合使用。
考虑以下示例(为了清晰起见,进行了简化):
数据库表定义如下:
CREATE TABLE [dbo].[Product]
(
[Id] INT IDENTITY(1,1) NOT NULL ,
[ProductName] NVARCHAR(500) NOT NULL,
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED (Id ASC) WITH (FILLFACTOR=80),
CONSTRAINT [UQ_ProductName] UNIQUE NONCLUSTERED (ProductName ASC) WITH (FILLFACTOR=80)
)
Run Code Online (Sandbox Code Playgroud)
以及以下 C# 程序:
using System;
using System.Linq;
using System.Reflection;
namespace CcTest
{
class Program
{
static int Main(string[] args)
{
Product product = null;
string newProductName = "Basketball";
using (CcTestContext context = new CcTestContext())
using (var …Run Code Online (Sandbox Code Playgroud) c# sql-server concurrency entity-framework entity-framework-core
考虑以下脚本:
IF OBJECT_ID('tempdb.dbo.#INTERMED', 'U') IS NOT NULL
DROP TABLE #INTERMED;
IF OBJECT_ID('tempdb.dbo.#INTERMED1', 'U') IS NOT NULL
DROP TABLE #INTERMED1;
PRINT 'Inserting INTO #INTERMED'
GO
SELECT 11 AS Col1
INTO #INTERMED
RETURN -- Why does execution continue below this line?
PRINT 'Inserting INTO #INTERMED1' -- This doesn't print anything
GO
SELECT 'Testing testing 123' AS Col2
INTO #INTERMED1
SELECT * FROM #INTERMED1 i
Run Code Online (Sandbox Code Playgroud)
当您在SSMS中运行它时,您会注意到忽略RETURN,RETURN之后的PRINT语句不执行任何操作,然后继续执行.
有人可以解释原因吗?我希望它在RETURN之后立即退出.
我确实发现它与GO语句有某种关联,因为如果我注释掉所有GO语句,它的行为与预期一样(在RETURN之后退出),但我仍然没有解释.
如果您在MSDN中查看此帮助主题:
它说:"没有服务器端夏令时(DST)支持datetimeoffset."
任何人都能解释这意味着什么吗?
我读它的方式是:说DST生效,我使用SYSDATETIMEOFFSET().结果以这种格式出现:
YYYY-MM-DD hh:mm:ss [.nnnnnnn] [{+ | - } hh:mm]
该HH值将一个小时的背后我的实际的本地时间(好像DST未生效).是对的吗?
我使用VS 2008在C#中开发.
有没有办法配置VS 2008所以如果有Build Errors它会自动切换到"Error List"窗口?
我刚刚意识到TSVN支持本地挂钩.
有人能解释一下它们有用吗?
我已经使用服务器端挂钩强制为提交输入日志消息并阻止某些文件被检入; 还使用post-commit钩子在提交时发送电子邮件.
我们也使用AnkhSVN,我的理解是它不支持本地钩子,这是正确的吗?
这就是我想要完成的事情:
在SQL Server代理作业的第一步中检查数据库是否为只读.如果是这种情况 - 退出工作.
所以我想我将使用"高级属性"作业步骤,并选择"退出作业报告成功"为"失败阳离子:"
但是如何在不使用RAISERROR()的情况下使T-SQL脚本失败?原因我不想使用RAISERROR()是因为需要成为sysadmin服务器角色的成员才能使用它.
我找到了相当丑陋的方法 - 从表中选择一些不存在的东西,脚本看起来像这样:
declare @DBIsRO int;
SET @DBIsRO= (SELECT is_read_only
FROM sys.databases
WHERE name = 'test')
IF @DBIsRO=1
select * from dd -- table dd doesn't exist in current database
Run Code Online (Sandbox Code Playgroud)
然而,这看起来像一个kludge,我正在寻找一个"正确"的方法.
sql-server ×5
c# ×4
.net-core ×2
asp.net ×2
asp.net-core ×2
t-sql ×2
concurrency ×1
dst ×1
ibm-mq ×1
icalendar ×1
itext ×1
javascript ×1
outlook ×1
svn ×1
svn-hooks ×1
tortoisesvn ×1