【问题标题】:Retrieving VARCHAR(MAX)检索 VARCHAR(MAX)
【发布时间】:2011-10-09 23:49:13
【问题描述】:

如何在 C# 中从 SQL Server 数据库中检索数据类型为 Varchar(MAX) 的列?

我不认为SqlDataReader 有助于检索它。

有什么线索吗?

谢谢

【问题讨论】:

  • 我尝试使用 SqlDataReader reader = command.ExecuteReader(); 检索它但我读到它需要使用 Streams/Pointers/Something 进行检索,而传统方法不起作用
  • System.String 就是你所需要的
  • @Joy - 数据有多大大;如果它是巨大的,那么您可能需要做一些不同的事情......
  • 题外话,如果它的xml数据你可以查看ExecuteXmlReader
  • 在这里查看。 msdn.microsoft.com/en-us/library/bb399384.aspx 根据我使用 C# 和存储过程的经验,我必须将参数的大小指定为 -1。除此之外,几乎可以像常规的 nvarchar 或 varchar 参数一样工作。

标签: c# .net asp.net sql sql-server-2005


【解决方案1】:

Working with Large-Value Types in ADO.NET

reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
    SqlChars buffer = reader.GetSqlChars(0);
}

或者只是将其转换为 CLR 类型:

while (reader.Read())
{
     string str = reader[0].ToString();
     Console.WriteLine(str);
}

【讨论】:

    【解决方案2】:

    它只是一个字符串字段....就像任何其他字符串一样抓取它.....

    // define your query
    string query = "SELECT YourField FROM dbo.YourTable WHERE ID = 1";
    
    using(SqlConnection conn = new SqlConnection("......"))
    using(SqlCommand cmd = new SqlCommand(query, conn))
    {
       conn.Open();
    
       using(SqlDataReader rdr = cmd.ExecuteReader())
       {
           if(rdr.Read())
           {
              string fieldValue = rdr.GetString(0);
           }
       }
    
       conn.Close();
    }
    

    VARCHAR(MAX) 类型确实没有什么特别之处 - 它只是一个文本字段,最多可以容纳 2 GB 的文本 - 就像 .NET string 一样。您无需执行任何特殊操作,例如流式传输或其他任何操作 - 只需将列读入字符串!

    【讨论】:

    • 不过,如果结果是 500MB,您可能选择通过流式 API 读取它
    • @Marc Gravell:是的,当然 - 但是你真的有多少 VARCHAR(MAX) 列可以容纳 500 MB 的数据?
    • 我认为 .NET 字符串的大小有一个实际限制,低于 2 GB。
    • @marc_s 兄弟,它有效。谢谢你。但我只是好奇它会使用 SqlDataAdapter 吗?
    • 我想撤消我的反对票,但 stackoverflow 不允许。我最初认为这种方法会将检索到的字符串截断(没有警告)长度为 2033 - 但是当查询返回 [xml] 列类型时适用 - 而不是 nvarchar(max)。
    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2015-05-12
    • 1970-01-01
    • 2018-11-21
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多