Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何查找绑定DataGridView列的数据库类型_C#_Sql_Winforms_Datagridview_Sqldatatypes - Fatal编程技术网

C# 如何查找绑定DataGridView列的数据库类型

C# 如何查找绑定DataGridView列的数据库类型,c#,sql,winforms,datagridview,sqldatatypes,C#,Sql,Winforms,Datagridview,Sqldatatypes,我需要知道DataGridView中每个列的原始类型 它与动态SQL select绑定,例如,“select*FROM artists;” 我想在网格上方添加一个数据的表单视图,并通过编程创建标签和文本框,然后创建一些来保存字段。我将它们添加到FlowLayoutPanel中,但我希望调整大小,特别是多行属性和高度,以容纳200-500个字符的长注释和描述字段 在查看文本列时,我只找到数据类型string 我知道我可以通过查询systables来查找列,但最好能找到比这更接近的原始数据类型;另外

我需要知道DataGridView中每个列的原始类型

它与动态SQL select绑定,例如,
“select*FROM artists;”

我想在网格上方添加一个数据的表单视图,并通过编程创建标签和文本框,然后创建一些来保存字段。我将它们添加到FlowLayoutPanel中,但我希望调整大小,特别是多行属性和高度,以容纳200-500个字符的长注释和描述字段

在查看文本列时,我只找到数据类型
string

我知道我可以通过查询systables来查找列,但最好能找到比这更接近的原始数据类型;另外,我使用的是MYSQL atm,一个不需要查询数据库的解决方案也希望是独立于DBMS的

编辑1

我在DGV里装的都是些稀奇古怪的东西:

DBDA = new MySqlDataAdapter(sql, DBC);
MySqlCommandBuilder cb = new MySqlCommandBuilder(DBDA);
DBDS = new DataSet(ddlb_tables.Text);
DBDA.FillSchema(DBDS, SchemaType.Mapped);  //<- This was the missing piece of code!!
DBDA.Fill(DBDS, ddlb_tables.Text);
dataGridView1.DataSource = DBDS;
dataGridView1.DataMember = ddlb_tables.Text;

只要我知道字段的长度,不获取原始类型不是问题。

使用数据集而不是数据网格:

foreach (DataColumn col in DBDS[ddlb_tables.Text].Text.Columns)
{
    if (col.DataType == typeof(string))
    {
        var len = col.MaxLenght;
        ...
    }
}
编辑:

填写前,您可能需要添加以下行:

   DBDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
资料来源:

编辑2:

或对于不带键的结果集:

   DBDA.FillSchema(DBDS, SchemaType.Source);
或:


如何填写
DataGridView
?@lomed请参见编辑的问题!这对我有什么帮助?我需要知道柱子的最大长度。我已经用调试器深入研究了DataTable,但是所有的varchar etc数据类型都已经映射到了string。填充后是否检查?您确定数据库限制了列的长度吗?MSDN:
如果列没有最大长度,则值为-1(默认值)。
是和是。我在填充了板上的2223行之后进行了检查,在MYSQL中,所有的varchar和char列都将CHARACTER_max_长度设置为各自的大小。(这会自动发生。)只要结果集有一个键,此功能就可以工作,但对于无键
视图
等,它会崩溃。我冒昧地添加了一个替代但安全的解决方案,以便接受的答案包含所需的所有信息,好吗?
   DBDA.FillSchema(DBDS, SchemaType.Source);
   DBDA.FillSchema(DBDS, SchemaType.Mapped);