T-SQL中执行存储过程与C#执行同样操作的比较
1 exec sp_executesql N"UPDATE [dbo].[Courses]
2 SET [Title] = @0
3 WHERE (([CourseID] = @1) AND ([Title] = @2))
4 ",N"@0 nvarchar(max) ,@1 int,@2 nvarchar(max)
5 ",@0 = N"Maths",@1 = 1,@2 = N"Calculus"
6 go
您提供的是一个使用sp_executesql
存储过程执行参数化SQL语句的T-SQL示例。这个示例主要用于更新dbo.Courses
表中的记录。以下是对代码片段的解释:
-
exec sp_executesql
: 执行内置的sp_executesql
存储过程,它允许使用参数化查询在SQL Server中运行动态T-SQL。 -
第一个参数(N"UPDATE [dbo].[Courses]...):代表要执行的参数化T-SQL语句。此示例中,将更新
dbo.Courses
表中CourseID为1且Title为"Calculus"的记录。新的Title值设为"Maths"。 -
第二个参数(N"@0 nvarchar(max)...):定义T-SQL语句中使用的参数类型。示例中有三个参数:@0(nvarchar(max)),@1(int),@2(nvarchar(max))。
-
后续参数(@0 = N"Maths", @1 = 1, @2 = N"Calculus"):设置参数的具体值。示例中,@0的值为"Maths",@1的值为1,@2的值为"Calculus"。
-
go
:在SQL Server Management Studio (SSMS)或sqlcmd工具中使用,表示批处理结束。请注意,在C#等编程环境中,不需要添加go
。
若要在C#中执行类似的操作,可以使用ADO.NET或Entity Framework Core等数据访问技术。以下是使用ADO.NET执行该示例的方法:
using (SqlConnection connection = new SqlConnection("Your_Connection_String"))
{
connection.Open();
string sql = @"UPDATE [dbo].[Courses]
SET [Title] = @0
WHERE (([CourseID] = @1) AND ([Title] = @2))";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.AddWithValue("@0", "Maths");
command.Parameters.AddWithValue("@1", 1);
command.Parameters.AddWithValue("@2", "Calculus");
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine($"{rowsAffected} rows updated.");
}
}
请将Your_Connection_String
替换为实际的数据库连接字符串。如果您使用Entity Framework Core,请参阅其文档了解如何执行更新操作。