可能我在这里忽略了一些东西,但当我从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);
那是什么给出的?
有点与this attempted answer有关,但仍未解决。
这样做的正确方法是什么,以便从SqlServer2012数据库正确检索我的字符串列MaxLengths?
答案 0 :(得分:3)
我认为您需要使用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;
}