在SQL中存储符号

时间:2018-01-31 17:08:31

标签: c# sql-server xml

我有一个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可以包含符号,例如:. , - / \ %。我只想知道如何在数据库中存储这些符号。

1 个答案:

答案 0 :(得分:0)

有一些转义符号可以让您拥有非平凡的列名;这样:

create table Foo (Id int, [Evil \ Column | Name] int)

工作 - 但是代码非常笨拙和脆弱。例如,它会提示问题:&#34;如果我的名字包含[]?&#34;该怎么办?转义运行时文本是一个危险的游戏,一旦出错就会非常糟糕。

然而!我强烈怀疑使用键/值对可以更好地映射此数据 ,因此Metrics表中的名称是(非列)(使用IdName,以及您需要的任何内容 - 可能是Unit),而您的读数有一个DeviceMetric表格DeviceIdMetricIdValue经常但并不总是在运行时不应该像这样改变列模式的情况。 某些情况下它们非常有意义(特别是当数据量和布局是一个真正的因素时),但默认情况下 绝对应该避免。