未正确设置C#DataTable列类型

时间:2017-07-17 23:15:54

标签: c# types datatable

DataTable中的类型有问题。在下面的代码中,我有一个数据表,我为每个列指定了类型:

        logItems = new DataTable();
        logItems.Columns.Add(new DataColumn("Machine_Name",typeof(string)));
        logItems.Columns.Add(new DataColumn("Time_Stamp", typeof(DateTime)));
        logItems.Columns.Add(new DataColumn("Message_Text", typeof(string)));
        logItems.Columns.Add(new DataColumn("Message_Type",typeof(MsgType)));

稍后当我尝试使用数据表时,就好像表的类型没有设置一样。例如,我在这里用一些数据填充表格。

            DataRow dataRow = logItems.NewRow();
            dataRow["Machine_Name"] = machineName;
            dataRow["Time_Stamp"] = GetDateTime(lineItem);
            dataRow["Message_Text"] = GetMsgText(lineItem);
            dataRow["Message_Type"] = GetMsgType(dataRow["Message_Text"]);
            logItems.Rows.Add(dataRow);

GetMsgType功能的签名为MsgType GetMsgType(string messageText)

我在使用dataRow["Message_Type"] = GetMsgType(dataRow["Message_Text"])行时遇到问题:如果没有ToString()之后它就无法运行,我无法理解原因。当我使用DataRow方法创建新NewRow()时,我看到它的方式,它创建了与logItems相同方案的数据行。因此,列"Message_Text"的类型为string,因此当我在GetMsgType函数中使用它时,我应该可以使用它,但是因为我得到了一个&#,所以它没有按预期工作34;无法从对象转换为字符串"错误。

同样地,我在"Message_Type"列上进行比较时遇到了问题。该列被声明为类型enum MsgType{}(见上文),据我所知,使用它是合法的:

        DataRow[] errorSubset = logItems.Select(query);
        foreach(DataRow lineACDC in errorSubset)
        {
            if (lineACDC["Message_Type"] == MsgType.Error) 
            {

任何见解都表示赞赏。

0 个答案:

没有答案