我有一些存储过程,我插入到我的SQL Server数据库中.我想返回此GUID以用于将来的插入,或者我发现它用作它.
我知道我可以在过程中生成GUID并从中返回它,但是我想避免在那里生成它,因为它具有主键(guid)行的默认值.我记得像SCOPE_IDENTITY这样的函数用于返回刚才使用的标识列,与此类似的GUID是什么?
感谢帮助!谢谢 :)
我有一个我正在使用的SQL Server 2005数据库.对于我正在使用的查询,我想添加一个自定义列,可以从任何数字开始,并根据行条目号递增.
例如,我从数字10开始.我的结果中的每一行都有一个递增的数字10,11,12等.
这是我将使用的SELECT语句的示例.
int customVal = 10;
SELECT
ID, customVal++
FROM myTable
Run Code Online (Sandbox Code Playgroud)
上面的格式显然是错误的,但它在概念上是我正在寻找的.
结果:
ID CustomColumn
-------------------
1 10
2 11
3 12
4 13
Run Code Online (Sandbox Code Playgroud)
我该如何实现这种功能?
我找不到任何在结果中递增变量的引用.是这样的吗?
编辑:该customVal号码将从另一张表中提取.即可能Select对customVal变量做一个声明.您不能假设ID列将是任何可用的值.
该CustomColumn会自动递增开始的customVal.
我正在寻找在我所拥有的ac#winforms类中处理错误的最佳方法.该应用程序的要点是它有一个数据分析器,可以分析统计数据和其他类似的东西.但是,我正在寻找处理ABORT的正确方法.
例如,我有一个名为Analyzer的类
namespace PHOEBE
{
public class Analyzer
{
public Analyzer(){
DoAnalysis();
DoFurtherAnalysis();
}
public class DoAnalysis(){
try{
Convert.ToInt32("someNumber...."); //obviously fails..
}
catch{
//ERROR OCCURRED, ABORT ALL ANALYSIS
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,当调用DoAnalysis()时,会发生错误.catch块将捕获异常.但是,当发生此捕获时,它将返回到构造函数并运行DoFurtherAnalysis().这是个问题.
我知道你可以从每个方法返回值,其中每个值表示某个结果(即1 =成功,0 =失败).但是,我调用的很多方法都使用了返回值.我还可以使用一个在发生错误时被标记的布尔值,并在从构造函数调用下一个方法之前检查该值,但每次检查此值都很烦人且重复.
我真的希望某种类似"我可以使用的中止机制".还有其他解决方法吗?对此有任何有趣的解决方法吗?
假设从表单调用此类.
背景:
我正在使用Javascript中基于图块的游戏,其中角色在地图周围自由移动(没有对角线 - 左/右/上/下)并且当他在地图上移动时填充图块.有三种图块类型 - 您填充的图块(蓝色),当前路径(红色)和空图块(黑色).也有在地图上移动的敌人(星星),但仅限于空白区域.目标是尽可能多地填充地图.
地图的大小约为40x40.地图外部周围有一个1瓦厚的边框,已经"填充"(蓝色).
我已经确定泛洪填充算法可以在需要时填充区域的区域.但是,我的问题如下:
问题陈述: 如果没有敌人,我想只填充地图的一部分.
我的问题:
我可以运行泛洪填充算法并在它到达敌人占用的区块时停止它 - 但是,这是最有效的方法(对于实时游戏)吗?
如果是,我如何以系统的方式确定从何处开始算法,因为有多个区域需要检查,并且角色不必在完美的直线上移动(可以向上/向下/向右/向左曲折) ,但不能对角移动).
图片示例1(图片说明更好):
注意:一旦到达另一个填充区域,红色区域将变为蓝色(填充).在下面的示例中,包含区域中没有敌人,因此该区域已填满.

图片示例2:
在第二个例子中,在包含区域内(和外部区域 - 未显示)中有一个敌人,所以只有线条被填满.

总结:这种填充的最佳方法是什么?洪水填充是确定是否填充的最佳选择 - 40x40是一个非常大的计算.如果是,我如何确定从哪个瓷砖开始?
我在 C# Winform 项目中有一个 datagridview。此 datagridview 用于将值插入到数据库中。每列最多匹配相应的 db 列。
其中一列是 DateTime 列。我想“验证”这个日期以确保它的格式正确。理想情况下,您会离开单元格,它会将其转换为我选择的日期时间格式。
我使用了一系列事件来尝试创建此功能,但一直遇到问题。我一直遇到的问题是,当事件触发时,该值尚未存储在单元格中。因此,当我做这样的事情时,例如:
private void Grid_Modify_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (Grid_Modify.Columns[e.ColumnIndex].Name == "DateTime")
{
Grid_Modify[e.ColumnIndex, e.RowIndex].Value =
Convert.ToDateTime(Grid_Modify[e.ColumnIndex, e.RowIndex].Value).ToString("YYYY-MM-DD hh:mm:ss");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,它转换为日期时间的值是原始单元格值——而不是我刚刚输入的新值。我认为这是因为在更新单元格值之前触发了事件。
问题是:当我更改日期的值时,格式化日期的最佳方式是什么?
我尝试过的其他事件是:CellLeave、CellValueChanged、CellValidated 和 CellEndEdit。
注意: CellValueChanged 事件是唯一可以实际获取新单元格值的事件,但是,当我更改事件处理程序中的值时,它会陷入无限循环。
c# ×2
winforms ×2
algorithm ×1
datagridview ×1
events ×1
flood-fill ×1
guid ×1
javascript ×1
primary-key ×1
sql ×1
tile ×1
try-catch ×1