验证表中数据的过程

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
大家好(如果我发错主题,我深表歉意),

我希望你能帮助我。我对C#开发非常陌生,非常感谢您的专业知识。

我想要一个简单的过程/函数,可以调用它来验证表中的数据:

所以这是需要发生的事情:




  1. 遍历表的过程
  2. 根据某些规则更新某些字段


以下是根据表中特定字段的值应用的规则的一些示例:



  1. 1.如果[数据]。[Finance_Project_Number] =空/空白
    ?设置[Processing_Result] = 2
    ?set [Processing_Result_Text] =?无项目编号?


    2.if [数据]。[Finance_Project_Region] =空/空白

    ?设置[Processing_Result] = 2
    ?设置[Processing_Result_Text] =吗?没有区域?
    另外,在第2点,如何检查有效条目?诸如“其中之一”之类的东西:豪登省,自由邦,林波波河等。然后它通过了,否则;
    ?设置[Processing_Result] = 2
    ?set [Processing_Result_Text] =吗?输入了错误的区域?


    3.使用另一个表交叉引用客户编号。列:[数据]。[客户编号]存在于[客户主代码]中。[客户代码]
    如果不:
    ?设置[Processing_Result] = 2
    ?set [Processing_Result_Text] =吗?不存在客户编号?
我提前谢谢你!
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,509
地点
悉尼,澳大利亚
编程经验
10+
你说的是什么意思"table"?您在谈论数据库表吗? ADO.NET DataTable是类型输入还是未类型输入?一个DataGridView或其他网格控件?还有吗

根据您所说的内容,我认为您将从循环(for或foreach)开始遍历表的行。对于每个以行作为参数,对其进行测试并进行适当修改的规则,您将有一个方法。然后,您可以直接或通过调用每个单独方法的另一个方法,在循环内的当前行上调用每个方法。
 

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
你说的是什么意思"table"?您在谈论数据库表吗? ADO.NET DataTable是类型输入还是未类型输入?一个DataGridView或其他网格控件?还有吗

根据您所说的内容,我认为您将从循环(for或foreach)开始遍历表的行。对于每个以行作为参数,对其进行测试并进行适当修改的规则,您将有一个方法。然后,您可以直接或通过调用每个单独方法的另一个方法,在循环内的当前行上调用每个方法。

抱歉,我有点含糊。

我正在创建Windows Service应用程序,并且在其中我想在将某些数据复制到新的SQL表之前验证现有SQL DB表中的数据。

我在考虑以下方面(我只是不知道该怎么做):

C#:
        public static void Validate()
        {


            using (var stageContext = new StagingTableDataContext())
            {
                var data = stageContext.ProjectMasters;


                foreach (var sourceDataEntry in data)
                {


                    if (sourceDataEntry.Finance_Project_Number == null)
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Number";
                    }
                    else if (sourceDataEntry.Finance_Project_Number == "")
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Number";
                    }
                    stageContext.SubmitChanges();


                }
            }
        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,509
地点
悉尼,澳大利亚
编程经验
10+
因此,您似乎正在使用实体框架,还是使用LINQ to SQL?那是您应该提供的信息,因为它可能与实现目标的最佳方式有关。您所建议的基本上是它。如我所说,我倾向于为每个规则编写一个方法,但这并不是绝对必要的。
 

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
感谢您的帮助 :)

我正在使用LINQ to SQL。到目前为止,这是我所拥有的:

2个问题:

  1. 关于评论部分有什么建议吗?
  2. 我应该使用存储过程吗?

C#:
public static void Validate()
        {
            using (var stageContext = new StagingTableDataContext())
            {
                var data = stageContext.ProjectMasters;

                foreach (var sourceDataEntry in data)
                {
                    //Project Number
                    if (sourceDataEntry.Finance_Project_Number == null)
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Number";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    else if (sourceDataEntry.Finance_Project_Number == "")
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Number";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    //Project Type
                    if (sourceDataEntry.Finance_Project_Type == null)
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Type";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    else if (sourceDataEntry.Finance_Project_Type == "")
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Type";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    //Project Region
                    if (sourceDataEntry.Finance_Project_Region == null)
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Type";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    else if (sourceDataEntry.Finance_Project_Region == "")
                    {
                        sourceDataEntry.Processing_Result = 2;
                        sourceDataEntry.Processing_Result_Text = "No Project Region";
                        sourceDataEntry.Processed_Datetime = DateTime.Now;
                    }
                    //if (sourceDataEntry.Finance_Project_Region != "Gauteng") ||
                    //        (sourceDataEntry.Finance_Project_Region != "Free State") ||
                    //        (sourceDataEntry.Finance_Project_Region != "Limpopo") ||
                    //        (sourceDataEntry.Finance_Project_Region != "Kwazulu Natal") ||
                    //        (sourceDataEntry.Finance_Project_Region != "Western Cape");
                    //{
                    //    sourceDataEntry.Processing_Result = 2;
                    //    sourceDataEntry.Processing_Result_Text = "Incorrect Province";
                    //    sourceDataEntry.Processed_Datetime = DateTime.Now;
                    //}

                    stageContext.SubmitChanges();

                }
            }
        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,509
地点
悉尼,澳大利亚
编程经验
10+
1.正如您可能猜到的,注释部分是错误的。您需要与那些条件,而不是或。也就是说,您可以将所有值放入数组中,然后调用一次Contains。

2.如果您愿意,您可以,但是没有真正的需要。在我看来,使用ORM倾向于不使用存储库。
 

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
谢谢!

1.我尝试过&& but get a message "无效表达词"-关于我在做什么错的任何建议?
2.我已经(快速地)进行了一些简单的阅读,似乎存储过程并非总是可行的。另外,此应用程序不是大型应用程序,因此我选择的方法应该没问题。


 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,509
地点
悉尼,澳大利亚
编程经验
10+
1. I have tried && but get a message "无效表达词"-关于我在做什么错的任何建议?
您需要除去所有的开头和结尾括号,而只将整个布尔表达式包装在一组中,否则就用剩下的全部并在另外的一组括号中包装。另外,在最后一个括号后删除分号。
2.我已经(快速地)进行了一些简单的阅读,似乎存储过程并非总是可行的。另外,此应用程序不是大型应用程序,因此我选择的方法应该没问题。
作为应用程序开发人员,存储过程通常应该是您的最后选择。从DBA的角度来看,那些人通常会喜欢它们,因为他们希望在数据库中拥有尽可能多的逻辑。应用程序开发人员通常应该采用相反的方法,因为由于多种原因,数据库中的逻辑很难处理。我只会倾向于将sproc用于重型数据库工作,因为它们可以显着提高性能。
 

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
您需要除去所有的开头和结尾括号,而只将整个布尔表达式包装在一组中,否则就用剩下的全部并在另外的一组括号中包装。另外,在最后一个括号后删除分号。

谢谢-这有效!

作为应用程序开发人员,存储过程通常应该是您的最后选择。从DBA的角度来看,那些人通常会喜欢它们,因为他们希望在数据库中拥有尽可能多的逻辑。应用程序开发人员通常应该采用相反的方法,因为由于多种原因,数据库中的逻辑很难处理。我只会倾向于将sproc用于重型数据库工作,因为它们可以显着提高性能。

注意-谢谢小费! :喜极而泣:
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,509
地点
悉尼,澳大利亚
编程经验
10+
如何将线程标记为已回答?

编辑您的第一篇文章,并将前缀更改为“已回答”。最好在发布时将前缀设置为Question,除非这当然不是问题。
 

我在途中

会员
已加入
2016年1月18日
留言内容
12
编程经验
Beginner
编辑您的第一篇文章,并将前缀更改为“已回答”。最好在发布时将前缀设置为Question,除非这当然不是问题。

编辑第一篇文章时,我只有2个前缀选项;没有前缀和问题。我更改为没有前缀来测试它,现在根本没有前缀了。
 
最佳 底部