nVarchar和SqlParameter

时间:2011-01-18 23:18:18

标签: c# nvarchar sqlparameter

我正在开发一个必须支持多种语言的应用程序。为了解决特殊字符问题我正在使用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。

很抱歉,如果我很难理解我的问题。我的英语很差= /

5 个答案:

答案 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)

使用SQLParameters

这是一个简单的例子:

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")