【问题标题】:Varchar(N) being ignored in DataTable.Load()在 DataTable.Load() 中忽略 Varchar(N)
【发布时间】:2013-10-17 05:10:14
【问题描述】:

可能我在这里忽略了一些东西,但是当我从SqlCommand.ExecuteReader() 加载数据表时,我发现我的字符串字段的 MaxLength 属性被忽略并在生成的 DataColumn 中重置为“50”。这是一个示例表:

CREATE TABLE MySqlServerTable (
[instance_id] INT           NOT NULL,
[field_id]    INT           NOT NULL,
[value]       VARCHAR (MAX) NOT NULL);

我用来初始化本地DataTable的方法是

public DataTable GetDT()
{
    string query = "SELECT top 0 * FROM MySqlServerTable;";
    SqlCommand cmd = new SqlCommand(query, _msSqlConn);
    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader());
    return dt;
}

其中 _msSqlConn 是已打开的 SqlConnection。如果然后滚动浏览 DataColumns,我会发现 value 列(字符串列)的 MaxLength 已分配为 50。

Console.WriteLine(GetDT().Columns["value"].MaxLength);

那是什么?

this attempted answer 有点相关,但仍未解决。

这样做的正确方法是什么,以便从 SqlServer2012 数据库中正确检索我的字符串列 MaxLengths?

【问题讨论】:

标签: c# sql sql-server datatable


【解决方案1】:

我认为您需要使用DataAdapter.FillSchema() 来检索元数据。试试这个:

_msSqlConn.Open();
using (SqlDataAdapter da = new SqlDataAdapter(query, _msSqlConn))
{
    DataTable dt = new DataTable();
    da.FillSchema(dt, SchemaType.Mapped); //Or may be SchemaType.Source
    return dt;
}

【讨论】:

  • 是的。就是这样。填充架构。感谢 Kaf 和 Cybşʁgϟ37
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多