Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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#.NET中唯一的约束异常处理_C#_Oracle_Winforms_Exception Handling_Unique Constraint - Fatal编程技术网

c#.NET中唯一的约束异常处理

c#.NET中唯一的约束异常处理,c#,oracle,winforms,exception-handling,unique-constraint,C#,Oracle,Winforms,Exception Handling,Unique Constraint,我是c#.NET的初学者,我正在努力寻找一种有效的方法来捕获c#(windows窗体)中唯一的约束异常 我处理的是三个数据库表列的组合,它们应该是唯一的,但我无法处理表单上出现的异常 下面是我在数据库管理器的OnBeforeSaving事件中尝试的代码。提前谢谢你的帮助。我正在寻找一种捕获异常的有效方法(Oracle) 更新后的代码块是 private void dbInstCharges_OnBeforeSaving(object sender, DataManagerBefo

我是c#.NET的初学者,我正在努力寻找一种有效的方法来捕获c#(windows窗体)中唯一的约束异常

我处理的是三个数据库表列的组合,它们应该是唯一的,但我无法处理表单上出现的异常

下面是我在数据库管理器的
OnBeforeSaving
事件中尝试的代码。提前谢谢你的帮助。我正在寻找一种捕获异常的有效方法(Oracle)

更新后的代码块是

        private void dbInstCharges_OnBeforeSaving(object sender, DataManagerBeforeSavingArgs e)
       {
        //e.Record["EQ17_SS01_ID"] = Config.MemberID;
        //e.Record["EQ17_EQ16_ID"] = dbManager.CurrentDataRecord["EQ16_ID"];
        try
        {
            UniqueConstraint TableUnique = new UniqueConstraint (new DataColumn[] { dbInstCharges.Table.Columns["EQ17_GC09_ID"], dbInstCharges.Table.Columns["EQ17_CH01_ID"], dbInstCharges.Table.Columns["EQ17_GC05_ID"] });
            dbInstCharges.Table.Constraints.Add(TableUnique);
            //this.dbInstCharges.Table.PrimaryKey = new DataColumn[] { dbInstCharges.Table.Columns["EQ17_GC09_ID"], dbInstCharges.Table.Columns["EQ17_CH01_ID"], dbInstCharges.Table.Columns["EQ17_GC05_ID"] };
        }
        catch (Exception ex)
        {
            MessageBox.Show("Please enter a unique record");

        }
      }
处理ArgumentException后的代码

    private void dbInstCharges_OnBeforeSaving(object sender, DataManagerBeforeSavingArgs e)
    {
        //e.Record["EQ17_SS01_ID"] = Config.MemberID;
        //e.Record["EQ17_EQ16_ID"] = dbManager.CurrentDataRecord["EQ16_ID"];
        try
        {

            UniqueConstraint TableUnique = new UniqueConstraint(new DataColumn[] { dbInstCharges.Table.Columns["EQ17_GC09_ID"], dbInstCharges.Table.Columns["EQ17_CH01_ID"], dbInstCharges.Table.Columns["EQ17_GC05_ID"], dbInstCharges.Table.Columns["EQ17_SS01_ID"], dbInstCharges.Table.Columns["EQ17_EQ16_ID"] });
            dbInstCharges.Table.Constraints.Add(TableUnique);
            //this.dbInstCharges.Table.PrimaryKey = new DataColumn[] { dbInstCharges.Table.Columns["EQ17_GC09_ID"], dbInstCharges.Table.Columns["EQ17_CH01_ID"], dbInstCharges.Table.Columns["EQ17_GC05_ID"], dbInstCharges.Table.Columns["EQ17_SS01_ID"], dbInstCharges.Table.Columns["EQ17_EQ16_ID"] };
        }
        catch (ArgumentException ex)
        {
            MessageBox.Show("Please enter a unique record");
        }

    }

我认为您并不真正理解异常处理。我会尽力解释你的错误/误解作为回答。如果执行一段代码,此代码将一直运行到异常发生或异常完成的位置。如果发生异常,您的代码将中断并抛出异常,或者执行catch块(如果存在)。如果使用
try{}catch{}
结构,并且出现异常,则代码将在
catch{}
中跟随。但是在try块中没有跳转或跳回代码。这对您的代码块意味着什么:

try
{
  UniqueConstraint TableUnique = new UniqueConstraint(new DataColumn[{//Your data});
  dbInstCharges.Table.Constraints.Add(TableUnique);
  //this.dbInstCharges.Table.PrimaryKey = new DataColumn[] {//Your data};
}
catch (ArgumentException ex)
{
  MessageBox.Show("Please enter a unique record");
}
try块执行到参数异常发生的点。因为捕获ArgumentException(这是正确的方法),所以代码跳转到catch块并执行它。此时将显示消息并完成代码。确保在处理异常后,代码不会跳回并执行try块的更多行。这不会也不能工作,因为有一个错误的参数破坏了您的代码因此,绝对有必要修复参数异常。修复此问题后,您可以按如下方式处理唯一的约束异常:

try
{
    UniqueConstraint TableUnique = new UniqueConstraint(new DataColumn[{//Your data});
  dbInstCharges.Table.Constraints.Add(TableUnique);
  //this.dbInstCharges.Table.PrimaryKey = new DataColumn[] {//Your data};
}
catch (OracleException ex)
{
  MessageBox.Show("Please enter a unique record.");
}
ArgumentException总是在使用 执行唯一约束异常。这就是为什么这个例外是如此 从未被抓住


欢迎来到StackOverflow!我并不十分清楚:显示的代码是否捕获了异常,而您正在询问如何处理它?或者异常是在其他地方抛出的?然后请显示抛出它的代码。我猜它不是“保存前”抛出的,而是真正保存数据时抛出的。顺便说一句:你说的是
OnBeforeSaving
,但是显示的方法名为
。\u OnDataSaved
。。。打字错误还是错误的一部分?看起来像重复的问题。这段代码有什么问题?@Reniuz它捕获了主键约束,但仍然没有捕获唯一约束异常。任何列都可以有空值,但它会给出一个错误“ColumnName不允许空值”。除了我尝试过的方法之外,还有其他方法使这些列唯一吗?您是否尝试过将
ConstraintException
更改为
Exception
,并在调试时检查得到的异常类型?您可能会得到
OracleException
,其中包含错误代码。您应该检查的错误代码应该是
1
(可能代表ORA-00001)。
因此您绝对有必要修复您的参数异常
这句话应该粗体并加下划线:)@Reniuz Done;)下划线不可能…;-)
try
{
    UniqueConstraint TableUnique = new UniqueConstraint(new DataColumn[{//Your data});
  dbInstCharges.Table.Constraints.Add(TableUnique);
  //this.dbInstCharges.Table.PrimaryKey = new DataColumn[] {//Your data};
}
catch (OracleException ex)
{
  MessageBox.Show("Please enter a unique record.");
}