小编War*_*now的帖子

如何在Oracle中重命名表以便更新所有外键,约束,触发器和序列并保留任何现有数据?

我需要在Oracle中重命名一个表,但我想确保引用该表的任何外键,约束,触发器和序列都被更新为使用新名称.

我怎么能确定我没有破坏任何东西?

请注意,我想保留表包含的任何现有数据.

oracle rename preserve

11
推荐指数
2
解决办法
4万
查看次数

如何使日期时间选择器始终包含该月的最后一天,同时仅显示月份和年份?

我有一个DateTimePicker,我设置为只显示月份和年份,如下所示:

myDateTimePicker.Format = DateTimePickerFormat.Custom;
myDateTimePicker.CustomFormat = "MMMM yyyy";
myDateTimePicker.ShowUpDown = true;
Run Code Online (Sandbox Code Playgroud)

不过,我想日期的价值永远是所选月份的最后一天,所以我设置使用ValueChanged事件的日期时间:

DateTime selectedDate = myDateTimePicker.Value;
DateTime lastDayOfMonth = new DateTime(
    selectedDate.Year,
    selectedDate.Month,
    DateTime.DaysInMonth(selectedDate.Year, selectedDate.Month));
myDateTimePicker.Value = lastDayOfMonth;
Run Code Online (Sandbox Code Playgroud)

问题是,如果我选择了像March这样的月份,并且使用向上/向下控件将月份更改为2月,则在处理ValueChanged事件之前会出现以下错误:

ArgumentOutOfRangeException was unhandled
Year, Month, and Day parameters describe an un-representable DateTime.
Run Code Online (Sandbox Code Playgroud)

这是可以理解的,因为日期是3月31日,并且它被更改为2月31日,这是无效日期.但是,我想将其更改为2月28日(或2月29日).

我怎样才能做到这一点?

c# exception event-handling datetimepicker

7
推荐指数
1
解决办法
7928
查看次数

使用 Graphviz 和 neato 时集群边界和节点之间的填充

我想在 Graphviz 中生成以下图表:

所需布局

由于此处解释的原因,此:

digraph
{
   layout=dot;
   rankdir="LR";
   overlap = true;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A; B; C; D; E; F; G; H; I;

   A -> B -> C;
   D -> E -> F;
   G -> H -> I;
   edge[constraint=false];
   A -> D -> G;

   subgraph clusterX
   {
      label="Cluster 1";
      A; B;
   }

   subgraph clusterY
   {
      label="Cluster 2";
      E; F; H; I;
   }

}
Run Code Online (Sandbox Code Playgroud)

产生这个:

不是所需的布局

对节点的出现顺序进行一些仔细调整后:

   F; E; I; H; D; G; A; B; C;
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果。

虽然这有效,但我希望更直接地控制节点的放置,因此我尝试切换到 neato,以便可以使用 …

graphviz neato

6
推荐指数
1
解决办法
6009
查看次数

为什么关闭嵌套子对话框也会关闭父对话框?

我使用ShowDialog打开一个表单作为模态对话框.此对话框允许使用ShowDialog再次打开另一个窗体作为模式对话框.

当最里面的对话框关闭时,这也会导致其父对话框关闭.为什么会发生这种情况,我该如何预防呢?

我已经创建了问题的hello world版本来说明这一点.

表格1:

表格1

private void OpenForm2Button_Click(object sender, EventArgs e)
{
    Form2 testForm = new Form2();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog();
    MessageBox.Show("Form 2 returned: " + Convert.ToString(dialogResult));
}
Run Code Online (Sandbox Code Playgroud)

表格2:

表格2

...
this.Form2OKButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Form2CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
...
this.AcceptButton = this.Form2OKButton;
this.CancelButton = this.Form2CancelButton;
...
private void OpenForm3Button_Click(object sender, EventArgs e)
{
    Form3 testForm = new Form3();
    DialogResult dialogResult = new DialogResult();
    dialogResult = testForm.ShowDialog();
    MessageBox.Show("Form 3 returned: " + Convert.ToString(dialogResult));
}
Run Code Online (Sandbox Code Playgroud)

表格3:

表格3

...
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 showdialog winforms

5
推荐指数
1
解决办法
5574
查看次数

当DataGridView具有焦点时,如何触发"接受"按钮?

我将一个表单作为对话框呈现.该表单包含DataGridView,TextBox和OK/Cancel按钮,如下所示:

在此输入图像描述

  • 我已将表单的AcceptButton属性设置为OK按钮,并将表单的CancelButton属性设置为Cancel按钮.
  • 我已将OK按钮的DialogResult属性设置为"OK",并将Cancel按钮的DialogResult属性设置为"Cancel"

如果文本框具有焦点,则按Enter键将使用"确定"的DialogResult关闭表单.但是,如果DataGridView具有焦点,则按Enter键不会关闭表单.

但是,按Esc键会导致窗体关闭,并显示取消的DialogResult.

这是一个两部分问题:

  1. 当DataGridView具有焦点时,Enter键的行为不一致的原因是什么?
  2. 当DataGridView具有焦点时,如何使用Enter的DialogResult来关闭窗体?

c# datagridview button winforms

4
推荐指数
2
解决办法
2487
查看次数

为什么Graphviz在引入子图时不再最小化边长

我有这个Graphviz图:

digraph
{
   rankdir="LR";
   overlap = true;
   Node[shape=record, height="0.4", width="0.4"];
   Edge[dir=none];

   A B C D E F G H I 

   A -> B -> C
   D -> E -> F
   G -> H -> I

   Edge[constraint=false]

   A -> D -> G

   subgraph clusterX
   {
      A
      B
   }

   subgraph clusterY
   {
      E
      H
      F
      I
   }
}
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

Graphviz输出

我原本期望A和D之间的边缘长度最小化,以便节点排列为:

A B C
D E F
G H I
Run Code Online (Sandbox Code Playgroud)

而不是

D E F
G H I
A B C
Run Code Online (Sandbox Code Playgroud)

如果我删除子图定义,这将按预期工作.

为什么Graphviz在引入子图时将ABC置于底部?

dot graphviz subgraph

3
推荐指数
1
解决办法
2188
查看次数

在检查空值后从OdbcDataReader读取值时,为什么会收到InvalidCastException?

在C#中使用OdbcDataReader,我有一个查询,该查询返回一个可能包含空值的整数列。

对于每一行,我想测试该值是否为null并适当地处理它。但是,当我使用IsDBNull执行此操作时,即使对于不为null的行,我也会收到InvalidCastException。为什么会发生这种情况?

如果我没有进行IsDBNull检查,则仅对于包含null的行会出现错误。

OdbcConnection DbConnection = new OdbcConnection("DSN=...");
DbConnection.Open();
OdbcCommand DbCommand = DbConnection.CreateCommand();
DbCommand.CommandText = @"
                        select 1 as result from dual
                        union
                        select null as result from dual";
OdbcDataReader DbReader = DbCommand.ExecuteReader();
Int32 result;
while (DbReader.Read())
{
    if (!DbReader.IsDBNull(0))
    {
        result = DbReader.GetInt32(0);  // Results in InvalidCastException
    }
    else
    {
        result = 0;
    }
    Console.WriteLine(Convert.ToString(result));
}

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

编辑:

以下检查空值的技术似乎有效。我想知道上面为什么没有。

object resultObject = DbReader.GetValue(0);
if (resultObject != DBNull.Value)
{
    result = Convert.ToInt32(resultObject);
}
else
{
    result = 0;
}
Run Code Online (Sandbox Code Playgroud)

c# null odbc exception

2
推荐指数
1
解决办法
8553
查看次数