繁体   English   中英

在DataTable.Load()中忽略Varchar(N)

[英]Varchar(N) being ignored in DataTable.Load()

可能我在这里忽略了一些东西,但是当我从SqlCommand.ExecuteReader()加载DataTable时,我发现我的String字段的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,我发现值列(字符串列)已被赋予MaxLength 50。

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

什么给出了什么?

有点与此尝试答案有关,但仍未解决。

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

我认为您需要使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM