GVKun编程网logo

DataTable.Load()引发错误:表达式中的未定义函数“ CountWeekDays”(表达式中使用了未定义值)

10

如果您对DataTable.Load感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于DataTable.Load的详细内容,我们还将为您解答引发错误:表达式中的未定义函数“C

如果您对DataTable.Load感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于DataTable.Load的详细内容,我们还将为您解答引发错误:表达式中的未定义函数“ CountWeekDays”的相关问题,并且为您提供关于.net – 如何处理System.Data.DataTableExtensions.CopyToDataTable()中的缺陷、.net 手动建DataTable 获取DataTable列名 修改DataTable 列的顺序、ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)、c# – DataTable中的System.Data.DuplicateNameException的有价值信息。

本文目录一览:

DataTable.Load()引发错误:表达式中的未定义函数“ CountWeekDays”(表达式中使用了未定义值)

DataTable.Load()引发错误:表达式中的未定义函数“ CountWeekDays”(表达式中使用了未定义值)

我正在使用Access数据库,并尝试加载DataTable对象,但收到错误消息。我的查询在标准访问模块内调用一个名为“
CountWeekDays”的公共函数,当通过Access本身运行时,会返回正确的结果。通过.NET应用程序调用时,为什么这不起作用?

 SELECT tbl1.ProjectID, tbl1.EntryDate AS StartDate, tbl2.EntryDate AS EndDate, (SELECT (ChecklistDayMax - ChecklistDayMin + 1) AS DaysAlotted FROM milestone_def WHERE MilestoneDefID = [@milestoneID]) AS DaysAlotted, (SELECT ProjectPriority FROM project_master WHERE ProjectID = tbl1.ProjectID) AS Priority,     IIF(Priority = 1, (SELECT BonusDaysFH FROM milestone_def WHERE MilestoneDefID = [@milestoneID]),  IIF(Priority = 2, (SELECT BonusDaysFM FROM milestone_def WHERE MilestoneDefID = [@milestoneID]),  IIF(Priority = 3, (SELECT BonusDaysFL FROM milestone_def WHERE MilestoneDefID = [@milestoneID])))) AS BonusDaysAllotted,  CountWeekDays(tbl1.EntryDate, tbl2.EntryDate) AS DaysRequired FROM checklist_entries AS tbl1  INNER JOIN checklist_entries AS tbl2 ON tbl1.ProjectID = tbl2.ProjectID WHERE tbl1.ChecklistDay = (SELECT ChecklistDayMin FROM milestone_def WHERE MilestoneDefID = [@milestoneID]) AND tbl2.ChecklistDay = (SELECT ChecklistDayMax FROM milestone_def WHERE MileStoneDefID = [@milestoneID]);

答案1

小编典典

只有在Access本身中运行查询时,才可以在Access查询中使用用户定义的VBA函数。如果要从.NET应用程序中运行查询,则查询将仅返回开始/结束日期,并且您的.NET代码将必须计算它们之间的工作日数。

.net – 如何处理System.Data.DataTableExtensions.CopyToDataTable()中的缺陷

.net – 如何处理System.Data.DataTableExtensions.CopyToDataTable()中的缺陷

嘿伙计们,所以我遇到了一些可能是Extension方法.copyToDataTable中的缺陷.

导入(在VB.NET中)System.Data.DataTableExtensions然后针对IEnumerable调用该方法使用此方法.如果要使用LINQ过滤数据表,然后在最后还原DataTable,则可以执行此操作.

即:

Imports System.Data.DaTarowExtensions
    Imports System.Data.DataTableExtensions

    Public Class SomeClass
            Private Shared Function GetData() As DataTable
                Dim Data As DataTable

                Data = LegacyADO.NETDBCall


                Data = Data.AsEnumerable.Where(Function(dr) dr.Field(Of Integer)("SomeField") = 5).copyToDataTable()


                Return Data

            End Function
    End Class

在上面的示例中,“WHERE”过滤可能不会返回任何结果.如果发生这种情况,copyToDataTable会抛出异常,因为没有DaTarows.

为什么?

正确的行为应该是返回一个Rows.Count = 0的DataTable.

任何人都可以想到一个干净的解决方法,这样调用copyToDataTable的人不必知道这个问题吗?

System.Data.DataTableExtensions是一个静态类,所以我无法覆盖行为….任何想法?我错过了什么吗?

干杯

更新:

我已将此问题提交给Connect.我仍然想要一些建议,但如果您同意我的意见,可以通过以上链接在Connect上投票

干杯

someDataTable.AsEnumerable().Where(r => r.Field<string>("SomeField") == "SomeValue").AsDataView().ToTable();

.AsDataView().ToTable()返回一个空表,其结构与someDataTable相同,如果现在有从.Where()返回的行

.net 手动建DataTable 获取DataTable列名 修改DataTable 列的顺序

.net 手动建DataTable 获取DataTable列名 修改DataTable 列的顺序

//创建 表
DataTable tables = new DataTable();
//添加 创建 列
//第一列
DataColumn cums = new DataColumn();
cums.ColumnName = "UserName";
cums.DataType = typeof(string);
tables.Columns.Add(cums);
cums = new DataColumn();
cums.ColumnName = "Age";
cums.DataType = typeof(string);
tables.Columns.Add(cums);
tables.Columns.Add("Address", typeof(string));  这种用的较多
tables.Columns["Address"].SetOrdinal(0);  //修改DataTable 列的顺序
string[] columnNames = GetColumnsByDataTable(tables);
string ss = columnNames[0];   
        /// <summary>
        /// 根据datatable获得列名
        /// </summary>
        /// <param name="dt">表对象</param>
        /// <returns>返回结果的数据列数组</returns>   
       public  string[] GetColumnsByDataTable(DataTable dt)
        {
            string[] strColumns = null;
            if (dt.Columns.Count > 0)
            {
                int columnNum = 0;
                columnNum = dt.Columns.Count;
                strColumns = new string[columnNum];
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    strColumns[i] = dt.Columns[i].ColumnName;
                }
            }
            return strColumns;
        }

ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)

ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)

本文转自:https://www.cnblogs.com/sntetwt/p/3496477.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
 
namespace Gzcms.Common
{
     public  class  CreateTable
     {
         public  static  DataTable getTable()
         {
             //1.创建 datatable 
             DataTable dt =  new  DataTable( "datatable" ); //可以给表创建一个名字,datatable 
             //2.给表加个列名: 
             dt.Columns.Add( "id" typeof (System.Int32)); //类型是可以变换的,比如System.Int32,System.Double.. 
             dt.Columns.Add( "title" typeof (System.String));
             //3.给表加行,内容: 
             DataRow row = dt.NewRow();
             row[ "id" ] = 1;
             row[ "title" ] =  "标题1" ;
             dt.Rows.Add(row); //这样就可以添加了 
             row = dt.NewRow();
             row[ "id" ] = 2;
             row[ "title" ] =  "标题2" ;
             dt.Rows.Add(row);
             return  dt;
             /*
             //4. 过滤表内容,,查找id为1的信息 
             DataRow[] arr = dt.Select("id=1");//返回的是一个数组 
             //5.将过滤的内容插入到另一个table中 
             DataTable dtnew = dt.Clone();//将表dt里的列信息复制到dtnew里,不是复制数据 
             foreach (DataRow row in arr)
             {
                 dtnew.Rows.Add(row);//把过滤好的信息加入到dtnew里 
             }
             dt.AcceptChanges();//添加好后,要记得刷新一下! 
 
             //6.给表排序 
             dt.DefaultView.Sort = "id desc";
             //7.删除数据 
             dt.Rows.Remove(row);//根据row行信息删除 
             dt.Rows.RemoveAt(index);//根据index索引删除 
             //8.修改dt 的列信息 
             row2[0].BeginEdit();
             row2[0]["status"] = 0;
             row2[0].EndEdit();
              */
         }
 
     }
}

 

c# – DataTable中的System.Data.DuplicateNameException

c# – DataTable中的System.Data.DuplicateNameException

我正在动态地将列添加到!IsPostBack中的静态数据表中.
static DataTable dtflow = new DataTable();

protected void Page_Load(object sender,EventArgs e)
    {

        if (!IsPostBack)
        {
            dtp.Columns.Add("slno");
            dtp.Columns.Add("portname");
            dtp.Columns.Add("type");
            dtp.Columns.Add("portid");
            dtp.Columns.Add("longitude");
            dtp.Columns.Add("latitude");
            dtp.Columns.Add("add1");
            dtp.Columns.Add("add2");
            dtp.Columns.Add("dist");
            dtp.Columns.Add("state");
            dtp.Columns.Add("country");
        }
    }

但是,当我第二次运行我的网站时,它显示了这样的例外情况

Exception Details: System.Data.DuplicateNameException: A column named ‘slno’ already belongs to this DataTable.

谁能告诉我如何解决这个问题

解决方法

静态数据表意味着无论您的网页实例如何,它都将始终存在.因此,当您第一次运行网页时,您的Page_Load会创建数据表,一切都很好.

但是当您第二次加载该页面或者其他人尝试加载您的页面时,数据表仍然存在,因为它是静态的,因此您尝试在数据表已存在时添加列.

3种方法可以解决这个问题:1.删​​除然后再次添加列.不要这样做,它在每个方面都是多余的和错误的代码.2.在dtp.Columns.Adds周围添加if语句,以确保它仅在第一次加载页面时运行它们.你可以查看是否存在columnds,你可以创建一个bool标志,或者你想到的其他方法.3.从变量声明中删除static,以便每次页面加载新数据表时都会创建.如果这样做,那么您可能希望将数据表基于静态数据源.

关于DataTable.Load引发错误:表达式中的未定义函数“ CountWeekDays”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.net – 如何处理System.Data.DataTableExtensions.CopyToDataTable()中的缺陷、.net 手动建DataTable 获取DataTable列名 修改DataTable 列的顺序、ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)、c# – DataTable中的System.Data.DuplicateNameException的相关信息,请在本站寻找。

本文标签: