【问题标题】:varchar(max) + linq to sqlvarchar(max) + linq to sql
【发布时间】:2010-10-13 12:05:09
【问题描述】:

我正在尝试读取一个 varchar(max) 列,但该字段被截断为 4,000 个字符。我见过similar questions,但他们在sql端。

我需要做什么才能获得整个字段?

例如:

using (DataContext dc = new DataContext())
{
    var foo = dc.foos.First();
    if (foo.Formula2.Length > 4000)
    {
        Console.WriteLine("success!");
    }
}

我尝试过setting TextSize 之类的方法,但没有任何作用。:

dc.ExecuteCommand("SET TEXTSIZE 100000;");
var foo = dc.foos.First();

更新:

服务器数据类型是 varchar(max)。有问题的字段是公式2:

如果我尝试将类型更改为不同的类型,例如 Object,我会在类型 't_PriceFormula' 的列 'Formula2' 中收到消息 'DbType 'VarChar(MAX)' 和类型 'System.Object' 之间的映射不支持。'

有什么建议吗?

【问题讨论】:

标签: c# linq-to-sql varchar


【解决方案1】:

thanks888

这似乎有点令人费解,但确实有效。

将字段转换为数组,然后再转换回字符串。

var foo = dc.foos.First();
string formula = new string(foo.Formula2.ToArray());

【讨论】:

  • 这不是888的答案吗?你不应该把它奖励给他们吗?
  • 888 的建议是将字段转换为 varbinary(max)。我投了赞成票并用它来得到我的回应。
【解决方案2】:

听起来像 .net 将 varchar 转换为 nvarchar 我不知道如何直接解决它。但 System.Text.Encoding 可能会有所帮助 试试这个

//1 set col in db to varbinary(max)

//2 and when u want to save to db
string formula = "...";
System.Data.Linq.Binary bin = new System.Data.Linq.Binary(System.Text.Encoding.ASCII.GetBytes());

//3 when u pull ou
    Binary bin = row.Formula2;
    string formula = System.Text.Encoding.ASCII.GetString(bin.ToArray());

【讨论】:

  • 将字段转换为 varbinary 是极端的。如果数据库支持该字段,那么必须有办法将其取出...
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多