我有一个XML文件,其中XML的每个标记都是我表中的一列,该代码如下所示:
try
{
SqlCommand makeCols = new SqlCommand
{
CommandText = "ALTER TABLE Devices ADD " + reader.Name + " nvarchar(100)",
CommandType = CommandType.Text,
Connection = conn
};
makeCols.ExecuteNonQuery();
}
catch (Exception)
{
break;
}
然后我有代码用每个列的数据更新SQL表,如下所示:
SqlCommand fillCols = new SqlCommand
{
CommandText = "UPDATE Devices SET "+ reader.Name + "=" + reader.Value + ", WHERE ID=1",
CommandType = CommandType.Text,
Connection = conn
};
fillCols.ExecuteNonQuery();
其中reader.Name
是XML标记,reader.Value
是数据。
我的数据如下所示:v2.14
,- 0.00 kg/s
,-99.00 Deg C
等。当我尝试更新表时,我收到以下错误:Exception Occured while creating table:Incorrect syntax near 'v2'. System.Data.SqlClient.SqlException
。
我的问题是,如何在SQL表中存储具有. , - / \
修改 - 澄清
Reader只是一个读取XML文件的循环。 reader.Name
是XML标记,因此例如<port1>
变为port
并成为列。 reader.Value
是<port1>
和</port1>
之间需要存储在我的数据库中的内容。 reader.Value
可以包含符号,例如:. , - / \ %
。我只想知道如何在数据库中存储这些符号。
答案 0 :(得分:0)
有一些转义符号可以让您拥有非平凡的列名;这样:
create table Foo (Id int, [Evil \ Column | Name] int)
工作 - 但是代码非常笨拙和脆弱。例如,它会提示问题:&#34;如果我的名字包含[
或]
?&#34;该怎么办?转义运行时文本是一个危险的游戏,一旦出错就会非常糟糕。
然而!我强烈怀疑使用键/值对可以更好地映射此数据 ,因此Metrics
表中的名称是行(非列)(使用Id
和Name
,以及您需要的任何内容 - 可能是Unit
),而您的读数有一个DeviceMetric
表格DeviceId
,MetricId
和Value
。 经常但并不总是在运行时不应该像这样改变列模式的情况。 某些情况下它们非常有意义(特别是当数据量和布局是一个真正的因素时),但默认情况下 绝对应该避免。