SeriLog 使用经典 .net 框架从 sql server 读取属性值
Posted
技术标签:
【中文标题】SeriLog 使用经典 .net 框架从 sql server 读取属性值【英文标题】:SeriLog read property value from sql server with classic .net framework 【发布时间】:2021-12-06 10:29:12 【问题描述】:我正在使用 serilog 和 ms 服务器来记录数据。在Properties
列中,我有这个:
<root><prop key="Meassage">Person is createrd</prop><prop key="FirstName">John</prop><prop key="LastName">Rami</prop><prop key="BirthDate">10/19/1996 1:10:27 PM</prop></root>
这以nvarchar(max)
数据类型存储在数据库中。
我想获取每个属性的值并尝试使用它
using (SqlConnection con = new SqlConnection(connectionString))
con.Open();
SqlCommand comm = new SqlCommand("SELECT Properties.value(\"/properties/property[@key='FirstName'])[1]\", 'nvarchar(max)') AS FName from EventLog", con);
SqlDataReader srd = comm.ExecuteReader();
while (srd.Read())
string s = srd["FName"].ToString();
con.Close();
但我得到一个错误:
System.Data.SqlClient.SqlException: '关键字'from'附近的语法不正确
有什么解决办法吗?
【问题讨论】:
not working
是什么意思?
SqlDataReader 异常
System.Data.SqlClient.SqlException: '关键字'from'附近的语法不正确。'
From 关键字前有一个逗号。删除它,然后重试。最好的方法是获取准确的查询并在您的数据库上进行尝试,以便于调试
【参考方案1】:
这是正确的解决方案
SELECT
CAST(Properties as XML).value(
'(/properties/property)[1]'
, 'nvarchar(max)'
)
AS FName
FROM EventLog
WHERE
CAST(Properties as XML).value(
'(/properties/property/@key)[1]=''FirstName'''
, 'bit'
) = 1
【讨论】:
以上是关于SeriLog 使用经典 .net 框架从 sql server 读取属性值的主要内容,如果未能解决你的问题,请参考以下文章