【发布时间】:2012-05-09 19:10:53
【问题描述】:
我正在使用 NLog 登录我的应用程序,作为其中的一部分,我们正在记录客户编号,这是 C# 中的字符串,以及数据库中的 varbinary(32)。我为此特定参数使用以下 SQL 代码。 SQL 语句的其余部分工作正常:
CONVERT(varbinary(32), @CustNumber)
以及以下 NLog 参数:
<parameter name="@CustNumber" layout="${event-context:item=CustNumber}" />
和下面的C#代码添加Nlog参数:
myEvent.Properties.Add("CustNumber", custNumber);
由于某种原因,实际表中存储的值只是原始客户编号字符串的第一个字符。我进行了双重和三重检查,以确保在将字符串发送到数据库之前我没有截断它。任何帮助将不胜感激。
【问题讨论】:
-
为什么要将字符串记录到
varbinary而不是varchar/nvarchar? -
只是我公司的要求,我想这是对安全措施的幼稚尝试。我的职责不是问为什么,只是对着电脑尖叫。
-
截断为 1 通常意味着您在参数或变量定义中缺少长度声明。不熟悉
NLog,但这是否需要长度属性? -
如果我是,我完全不知道那会在哪里。我在 C# 端使用一个字符串,那里没有大小声明。我在转换中使用了 varbinary(32)。那里有明确的尺寸声明。我在表中使用了 varbinary(32)。那里有明确的尺寸声明。我在 Nlog 中使用内联 SQL - commandText 来运行此查询,但您没有为 Nlog 定义我知道的参数长度。我要仔细检查一下……是的,nlog 没有大小。
-
@ClaytonHunt - 看起来是一个需要设置from the grammar here的
size属性。您可以使用 SQL Server Profiler 查看发送到数据库的命令,如果这没有帮助,可能会有所帮助......
标签: sql nlog varchar varbinary