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表中的记录。以下是对代码片段的解释:

  1. exec sp_executesql: 执行内置的sp_executesql存储过程,它允许使用参数化查询在SQL Server中运行动态T-SQL。

  2. 第一个参数(N"UPDATE [dbo].[Courses]...):代表要执行的参数化T-SQL语句。此示例中,将更新dbo.Courses表中CourseID为1且Title为"Calculus"的记录。新的Title值设为"Maths"。

  3. 第二个参数(N"@0 nvarchar(max)...):定义T-SQL语句中使用的参数类型。示例中有三个参数:@0(nvarchar(max)),@1(int),@2(nvarchar(max))。

  4. 后续参数(@0 = N"Maths", @1 = 1, @2 = N"Calculus"):设置参数的具体值。示例中,@0的值为"Maths",@1的值为1,@2的值为"Calculus"。

  5. 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,请参阅其文档了解如何执行更新操作。

posted @ 2023-06-10 15:43  GroundSoft  阅读(28)  评论(0编辑  收藏  举报