我正在开发一个必须支持多种语言的应用程序。为了解决特殊字符问题我正在使用NVarhcar作为我的文本字段。所以我对文本字段的SQL查询是
insert into tbl_text(text)values(N'Chci tančit v oblasti')
我的问题是把它放在SqlCommand中,是"insert into tbl_text(text)values(N@text)"
。它肯定会在数据库表中保存"N@text"
。
你们知道吗?我正在使用C#和SQL 2008。
很抱歉,如果我很难理解我的问题。我的英语很差= /
答案 0 :(得分:4)
Add(string,object)因此而被弃用(来自SQL Server团队的Pablo Castro):
问题在于C#和 VB.NET编译器会暴露出来 这段代码的奇怪行为:
command.Parameters.Add(“@ p”,0);
你可能希望这个使用 带有对象的重载 为其分配值0,而是 它会选择需要的过载 SqlDbType作为第二个参数!在 为了避免这种情况(可能 其他)之间的歧义 添加(string,sqldbtype)和Add(string, 对象),我们弃用Add(字符串, 对象)并介绍 AddWithValue(string,object)。在 一般来说,有多个重载 区别参数在哪里 类型是“对象”,其中一个是 危险的事情。
答案 1 :(得分:2)
您应该使用SqlParameters对插入进行参数化,以便明确指定数据类型。 (此外,它还可以帮助您解决查询引起的SQL Server注入攻击的麻烦)。
示例:强>
SqlCommand cmd = new SqlCommand("insert into tbl_text (text) values(@MYTEXT)", myConnection);
cmd.Parameters.Add(new SqlParameter("@MYTEXT", SqlDbType.NVarChar)).Value = "Chci tančit v";
cmd.ExecuteNonQuery();
答案 2 :(得分:1)
不要在参数名称前添加“N”,仅在使用字符串常量表示它是unicode字符串时使用。所以你的查询应该是:
insert into tbl_text(text) values (@text)
答案 3 :(得分:0)
这是一个简单的例子:
var cmd = _dbCon.CreateCommand();
cmd.CommandText =
"insert into tbl_text (textfield) values(@textfield)";
cmd.Parameters.Add(new SQLParameter("@textfield", "Chci tančit v oblasti"));
cmd.ExecuteScalar();
答案 4 :(得分:0)
这是简单示例
ad_request_output=$(/usr/local/nagios/libexec/check_http -w 0.18 -c 0.25 -H ${private_ip} -u "http://${private_ip}/fam/postGetAd.php?site_id=76986&partner_id=27de34b6f8b03d81&banner_id=183517&timeout=5000&version=1.5.1&language=jsp&format=wap&phone_headers=REMOTE_ADDR=>166.137.8.134||REMOTE_HOST=>http://localhost||HTTP_USER_AGENT=>Mozilla/5.0")