【问题标题】:Linq to SQL Insert trademark "™" SymbolLinq to SQL 插入商标“™”符号
【发布时间】:2013-01-29 18:05:01
【问题描述】:

我想在 MSSQL 2008 中插入一个带有商标符号 (™) 的字符串。

当我搜索问题时,我发现了一些基于 SQL 的解决方案:

修剪符号:

SELECT REPLACE('Microsoft™',char(153),'')

只插入符号:

INSERT mytable(col1) VALUES (char(153))

我也阅读了this 的问题,但我找不到解决方案。

有没有办法使用 Linq to SQL 插入带有符号的单词(如“Microsoft™”)?

我在 nvarchar 列上进行了试验。

编辑:

这是我的桌子:

这是我在 dbml 的映射:

这是我的代码:

var db = new DBDataContext();

Seller seller;
if(!db.GetTable<Seller>().Any(s => s.Username == username))
{
    seller = new Seller {Username = username, SellerName = name, FeedbackCount = feedback};
    db.Sellers.InsertOnSubmit(seller);
    db.SubmitChanges();
}

这是我要插入的名称:B♥Râ™

这是生成的 SQL:

INSERT INTO [dbo].[Sellers]([Username], [SellerName], [FeedbackCount])
VALUES (@p0, @p1, @p2)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 8000; Prec = 0; Scale = 0) [testuser]
-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [B♥Râ™]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [886]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.17929

【问题讨论】:

  • 哪个领域出现问题?卖家名还是用户名?无论是哪一个,我们能否看到为该属性生成的 c#,包括属性? (只需单击您感兴趣的属性并按 f12)
  • 仅使用商标符号有效!但我想我有编码问题。但是我根据this问题解决了。

标签: c# sql-server-2008 linq-to-sql


【解决方案1】:

您应该能够插入它。 C# 字符串是 unicode,nvarchar 列也是如此。您是否尝试过简单地插入它?

【讨论】:

  • 他应该检查数据库是否设置为支持 Unicode 而不仅仅是 Latin1。
  • 我试过了,但我得到了例外:String or binary data would be truncated.\r\nThe statement has been terminated。我仔细检查了列类型:nvarchar(32)。我的词样是:B♥Râ™
  • @Marc Gravell 我理解正确,这是一个 T-SQL 演示。我怎样才能用 c# 做到这一点?
  • 您确定问题是用户名而不是卖家名吗?尝试运行 SQL 分析器来查看发送到服务器的确切查询。
  • @AndersAbel 谢谢。问题是卖方名称。但不幸的是,我使用的是 sqlexpress,我没有 sql profiler。
【解决方案2】:

您是否尝试过使用“tm”符号的 ASCII 值 (Alt + 0153)?

【讨论】:

    【解决方案3】:

    您的文字不是 unicode;试试:

    SELECT REPLACE(N'Microsoft™',N'™','')
    

    INSERT mytable(col1) VALUES (N'™')
    

    (提示:它们有效)

    【讨论】:

    • @pilavu​​st 如果您使用的是 LINQ-to-SQL,那么首先应该没有问题,只要列/参数等配置正确。尝试使用dbContext.Log 查看正在使用的 SQL(或 SQL 跟踪)。然而!您提供的示例不是 LINQ-to-SQL,因此很难评论。
    • 我无法生成 SQL,所以我检查了映射。类型:string (System.String) 和服务器数据类型:NVarChar(32)。在我看来这很正常。
    • @pilavu​​st LINQ-to-SQL 一直在生成 SQL;这就是它的作用。 .Log 属性允许您查看实际传输的内容。那或 SQL 跟踪。基本上,要进一步评论,我们需要看看网络上发生了什么/
    • 对不起,你是对的。我将生成的 sql 添加到问题中。
    • @pilavu​​st 有趣;你能确认SellerNamenvarchar 列吗?该列的内容是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多