C# 如何使用LINQ调用具有INSERT的存储过程?
是否有任何可能的方法来执行非查询,而不必将其分配给LINQ to SQL类 假设我有这个过程,并且仅当C# 如何使用LINQ调用具有INSERT的存储过程?,c#,sql-server,linq,stored-procedures,linq-to-sql,C#,Sql Server,Linq,Stored Procedures,Linq To Sql,是否有任何可能的方法来执行非查询,而不必将其分配给LINQ to SQL类 假设我有这个过程,并且仅当Town\u Name(唯一约束)不存在时,我才想INSERT。否则,执行更新。当通过SQL Server执行此过程时,该过程运行良好并完成了任务。但是,我无法通过C代码执行它 我试图避免使用SQL客户端,作为我课程的一部分,我的小应用程序必须能够使用LINQ选择、插入/更新和删除数据 我所采取的方法总是导致0行受影响 // Call Procedure. db.P_SaveClient("00
Town\u Name
(唯一约束)不存在时,我才想INSERT
。否则,执行更新
。当通过SQL Server执行此过程时,该过程运行良好并完成了任务。但是,我无法通过C代码执行它
我试图避免使用SQL客户端,作为我课程的一部分,我的小应用程序必须能够使用LINQ选择、插入/更新和删除数据
我所采取的方法总是导致0行受影响
// Call Procedure.
db.P_SaveClient("000000001M", "Test", "Dummy", null, "+35699999999");
-- Procedure to be executed.
CREATE PROCEDURE Appointment.SaveClient
(
@id NVARCHAR(10),
@firstName NVARCHAR(35),
@lastName NVARCHAR(35),
@tel NVARCHAR(12),
@mob NVARCHAR(12)
)
AS
BEGIN
DECLARE @clientCount TINYINT
SELECT @clientCount = COUNT(Client_ID)
FROM Appointment.Client
WHERE Client_ID = @id
IF @clientCount = 0
BEGIN
INSERT INTO Appointment.Client
VALUES (
@id
, @firstName
, @lastName
, @tel
, @mob
)
END
ELSE
BEGIN
UPDATE Appointment.Client
SET Client_ID = @id
, First_Name = @firstName
, Last_Name = @lastName
, Telephone = @tel
, Mobile = @mob
END
END
我找到了一些教程:
Merge Town t
using ( select @Town_Name as 'Town_Name')
src on (src.Town_Name = t.Town_Name )
when NOT MATCHED then
insert (Town_Name) values (src.Town_Name)
output INSERTED.Town_ID
有关语法和更多示例,请参见此处:
旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp.
并使用其他东西作为前缀,或者根本不使用前缀!请注意,UPDATE
不会执行任何操作,因为它会查找具有该城镇名称的城镇,然后将其“更新”为相同名称。如果你想“更改需要传入的城镇名称,将原始名称或ID和新名称作为单独的参数传递。没错,我没有测试此脚本。我在几秒钟内提出这个问题是为了补充我的问题。关于SP,请注意。我忘了T-SQL使用sp_execute、sp_rename等来回答您的问题。不过,您可以使用传统的数据访问方法(SqlCommand
,等等)或在数据上下文上使用该方法来执行非实体查询。LINQ不能执行非查询吗?我已经尝试了一个merge语句,但它不起作用。我添加了输出并得到了输出的结果,但每当我右键单击表并选择“显示数据”时,即使在刷新之后,插入的数据也不存在。@IsaacHili它在SQL Server中是否正确运行?