首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nVarchar和SqlParameter

nVarchar和SqlParameter
EN

Stack Overflow用户
提问于 2011-01-19 07:18:18
回答 5查看 14.6K关注 0票数 2

我正在开发一个必须支持几种语言的应用程序。为了解决特殊字符问题,我在文本字段中使用了NVarhcar。因此,我对文本字段的SQL查询是

代码语言:javascript
复制
insert into tbl_text(text)values(N'Chci tančit v oblasti')

我的问题是把它放在"insert into tbl_text(text)values(N@text)"的SqlCommand中。当然,它将"N@text"保存在DB表中。

你们知道怎么做吗?我使用的是C#和SQL2008。

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

EN

回答 5

Stack Overflow用户

发布于 2011-01-19 09:37:35

由于此原因(来自SQL Server团队的Pablo Castro ),Add(string,object)已被弃用:

的问题是,C#和VB.NET编译器都会暴露这段代码非常奇怪的行为:

Command.Parameters.Add(“@p”,0);

您可能希望它使用重载,该重载接受一个对象并将值0赋值给它,但是它将选择接受SqlDbType作为第二个参数的重载!为了避免Add(string,sqldbtype)和Add(string,object)之间的歧义,我们不推荐使用Add(string,object),而引入了AddWithValue(string,object)。通常,在多个重载中,其中一个重载的区分参数类型是“object”,这是一件危险的事情。

票数 4
EN

Stack Overflow用户

发布于 2011-01-19 07:25:38

您应该使用SqlParameters参数化您的插入,这允许您显式地指定数据类型。(它还省去了找出查询引起的SQL服务器注入攻击的麻烦)。

示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-01-19 07:28:10

不要在参数名前加上"N“,只有在使用字符串常量来表示它是unicode字符串时才会使用。所以你的查询应该是:

代码语言:javascript
复制
insert into tbl_text(text) values (@text)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4730187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档