试图弄清楚它是否最好使用ExecuteScalar
,或者ExecuteNonQuery
我是否想返回新插入行的标识列。我已经阅读了这个问题并且我理解那里的差异,但是当查看我几周前编写的一些代码时(同时从这个网站大量借用)我发现在我的插入中我使用的是ExecuteScalar
,如下所示:
public static int SaveTest(Test newTest)
{
var conn = DbConnect.Connection();
const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
" VALUES ( @tester , @premise ) " +
"SET @newId = SCOPE_IDENTITY(); ";
using (conn)
{
using (var cmd = new SqlCommand(sqlString, conn))
{
cmd.Parameters.AddWithValue("@tester", newTest.tester);
cmd.Parameters.AddWithValue("@premise", newTest.premise);
cmd.Parameters.Add("@newId", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.CommandType = CommandType.Text;
conn.Open();
cmd.ExecuteScalar();
return (int) cmd.Parameters["@newId"].Value;
}
}
}
这可以满足我的需要,所以我想知道
- 我是否应该在
ExecuteNonQuery
这里使用,因为它“更适合”进行插入? - 由于我使用的是输出参数,因此检索标识值是否相同?
- 是否存在与一种或另一种方式相关的性能影响?
- 总体上是否有更好的方法来做到这一点?
我正在使用 Visual Studio 2010、.NET 4.0 和 SQL Server 2008r2,以防万一。