我需要在Oracle中重命名一个表,但我想确保引用该表的任何外键,约束,触发器和序列都被更新为使用新名称.
我怎么能确定我没有破坏任何东西?
请注意,我想保留表包含的任何现有数据.
我有一个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日).
我怎样才能做到这一点?
我想在 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,以便可以使用 …
我使用ShowDialog打开一个表单作为模态对话框.此对话框允许使用ShowDialog再次打开另一个窗体作为模式对话框.
当最里面的对话框关闭时,这也会导致其父对话框关闭.为什么会发生这种情况,我该如何预防呢?
我已经创建了问题的hello world版本来说明这一点.
表格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:

...
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:

...
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; …Run Code Online (Sandbox Code Playgroud) 我将一个表单作为对话框呈现.该表单包含DataGridView,TextBox和OK/Cancel按钮,如下所示:

如果文本框具有焦点,则按Enter键将使用"确定"的DialogResult关闭表单.但是,如果DataGridView具有焦点,则按Enter键不会关闭表单.
但是,按Esc键会导致窗体关闭,并显示取消的DialogResult.
这是一个两部分问题:
我有这个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)
产生这个输出:

我原本期望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置于底部?
在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)