我正在我的应用程序中实现一个SQL Server CE数据库,并尝试将一些SQL查询转换为代码。我有这样的声明:
INSERT INTO Unit (unitTypeID, label) VALUES (@unitTypeID, 'm/s' + NCHAR(0x00B2));
我在C#中的代码如下所示:
string value = @"'m/s' + NCHAR(0x00B2)";
cmdString = "INSERT INTO Unit (unitTypeID, label) VALUES (@guid, @value)";
cmd = new SqlCeCommand(cmdString, connection);
cmd.Parameters.Add("@guid", guid).SqlDbType = SqlDbType.UniqueIdentifier;
cmd.Parameters.Add("@value", value).SqlDbType = SqlDbType.NText;
cmd.ExecuteNonQuery();
NCHAR(0x00B2)是上标2.如何在C#中复制此功能? 我宁愿不将²粘贴到代码中,因为我在这个数据库中使用了几个特殊字符。
答案 0 :(得分:3)
您不能将表达式作为参数传递 - 只有值(事实上,这是首先使用参数化查询的一个重要原因)。所以你真的传递了字符串'''m/s'' + NCHAR(0x00B2)'
- 与你想要做的完全不同。
处理此问题的一种方法是在字符串中使用转义字符:"m/s\u00B2"
。
为了提高可读性,我建议将这些特殊字符保留为常量,例如:
/// <summary>Superscript two ("²").</summary>
const string SuperscriptTwo = "\u00B2";
...
var val = "m/s" + SuperscriptTwo;
...