首页 > 解决方案 > 如何获取列的类型并在c#中使用它

问题描述

我想在我的 c# 代码中的 access 数据库中创建一个插入函数,我希望这个函数能够获取类似于我的数据库中的列类型的参数

我试图制作一个列表并在其中添加列类型,但我想知道:

1- 如何使类型(插入函数的参数)等于 list_types

2-如果我想在另一个代码中使用我的类型,如何将运行时类型转换为普通类型 int、string

partial class Program
{
    public void insert(params object[] types)
    {

    }

    static List<object> list_types = new List<object>();

    static void Main(string[] args)
    {


        cmd.Connection = conn;
        conn.Open();
        cmd.CommandText = "SELECT * FROM students";
        reader = cmd.ExecuteReader();



        // add columns types in list to use it in parametrs of insert function
        for (int i = 0; i < reader.FieldCount; i++)
        {

            if (reader.GetFieldType(i).Name == "Int32")
            {
                list_types.Add(new int());

            }else if(reader.GetFieldType(i).Name == "String")
            {
                list_types.Add("any value because 'new string()' throw error (i wanna type only not value)");
            }
        }

        //printing types of elements of list type

        foreach(var item in list_types)
        {
            Console.WriteLine(item.GetType().ToString());
        }
        while (reader.Read())
        {
            Console.WriteLine(reader[0] + "    " + reader[1]);

        }
        conn.Close();
        Console.ReadKey();

    }
}

谢谢 :)

标签: c#ms-access

解决方案


你没有使用类型......你正在做这个奇怪的把一个类型变成一个字符串,然后再变成一个类型 mumbo-jumbo。

跳过所有这些怎么样:

List<Type> types = new List<Type>();
for(int fieldIndex = 0; fieldIndex < reader.FieldCount; fieldIndex++) {
    types.Add(reader.GetFieldType(fieldIndex));
}

然后将它们打印到控制台时:

    foreach(Type type in types) {
        Console.WriteLine($"{type.ToString()}");
    }

推荐阅读