varchar(max) + linq to sql

4

我有一个varchar(max)列,但是在读取时该字段被截断为4000个字符。我看到了类似的问题,但它们都是关于SQL方面的。

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

例如:

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

我尝试了像设置文本大小这样的东西,但没有任何变化。
dc.ExecuteCommand("SET TEXTSIZE 100000;");
var foo = dc.foos.First();

更新:

服务器数据类型为varchar(max)。所涉及的字段是formula2: alt text

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

有什么建议吗?


在 DBML 中,列是如何配置的?特别是 Server Data Type 属性? - Marc Gravell
数据库服务器的兼容性级别是什么?请参见此处 - http://msdn.microsoft.com/zh-cn/library/bb510680.aspx - Antony Scott
2个回答

3

感谢thanks888的帮助。

这看起来有点复杂,但它确实有效。

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

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

这不是888的答案吗?你应该把奖励给他们吧? - Merlyn Morgan-Graham
1
888的建议是将该字段转换为varbinary(max)。我点赞并使用它来得到我的响应。 - Christian Payne

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是极端的。如果数据库支持该字段,则必须有一种方法可以将其取出... - Christian Payne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接