ExecuteScalar()返回null,尽管数据已添加到DB

Gui*_*pos 7 c# sql t-sql ado.net executescalar

我有一个代码如下所示,我尝试将数据插入表中并返回新元素的ID(由自动增量给出).

int newEquipmentID = new int();

query = database.ParameterizedQueryString("INSERT INTO Equipment (EquipmentTypeID) VALUES ({0})", "equipmenttypeID");

newEquipmentID = (int)database.Connection.ExecuteScalar(query, DefaultTimeout, equipment.EquipmentTypeID);
Run Code Online (Sandbox Code Playgroud)

但它失败并返回null,就好像尚未添加新项目一样.但实际上我可以看到新项目在数据库中进行简单的咨询.

我的问题是"何时"将数据实际添加到数据库中,如何获取新添加项目的ID.谢谢!

Tim*_*ter 13

您不需要两个查询来创建新记录并检索新的标识值:

using (var con = new SqlConnection(ConnectionString)) {
    int newID;
    var cmd = "INSERT INTO foo (column_name)VALUES (@Value);SELECT CAST(scope_identity() AS int)";
    using (var insertCommand = new SqlCommand(cmd, con)) {
        insertCommand.Parameters.AddWithValue("@Value", "bar");
        con.Open();
        newID = (int)insertCommand.ExecuteScalar();
    }
}
Run Code Online (Sandbox Code Playgroud)

Side-Note:我不会使用这样的Database-Class,因为它容易出错.