【发布时间】:2019-10-28 07:11:54
【问题描述】:
我正在尝试从数据库中返回 InvoiceID,但它一直返回 -1。
我正在尝试从 tblInvoice 中选择发票 ID 以将其显示在表单上,并使用它将其插入到与 tblInvoice 具有一对多关系的第二个表中。
try
{
conn = new SqlConnection(conString);
conn.Open();
string select = "SELECT TOP 1 FId FROM tblFaktuur ORDER BY FId DESC";
SqlCommand cmd1 = new SqlCommand(select, conn);
i = (int)cmd1.ExecuteNonQuery();
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show("ReadInvoiceNumber()" + e.Message);
}
return i;
在 SQL Server 中运行查询 SELECT TOP 1 FId FROM tblFaktuur ORDER BY FId DESC 时,它会返回 6 的值,这是最后一个发票 ID。
【问题讨论】:
-
想想那个代码。您希望名为 ExecuteNonQuery 的方法如何处理查询?将其更改为
ExecuteScalar。 -
附带说明,这种代码几乎永远不会正确。人们几乎总是执行这种查询,以根据上次使用的 ID 计算下一个 ID,或者了解为他们刚刚创建的文档分配的 ID。在这两种情况下,使用该查询都是非常错误的,因为它只能在单个用户环境中正确工作。
-
除此之外,还应处理 SQLConnection,与 SqlCommand 相同。并且 catch 子句使用 MessageBox 这意味着它并没有真正与 UI 解耦......
-
您所描述的这段代码的重点是@GSerg 提到的问题。您已经创建了一个竞争条件来处理应该使用身份属性完成的操作。
标签: c# sql sql-server select