试图找出如果它是最好用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 2008 R2,如果说有什么区别。