0

我有以下代码,我希望它是一个存储过程

如何创建调用存储过程,使下面的代码就像一个方法调用。

存储过程存储在 Visual Studio 还是 MS SQL Server 中?

using (var conn = new SqlConnection(dbConnectionString))
using (var cmd = conn.CreateCommand())
{
        conn.Open();
        cmd.CommandText =
        @"use [Email Database]
INSERT INTO Emails_Log
(Email_ID, e_To, e_From, e_Subject, e_Date) 
VALUES
(@id, @to, @from, @subject, @date)";
        // Writes to database (local) instance
        cmd.Parameters.AddWithValue("@id", emailID);
        cmd.Parameters.AddWithValue("@to", emailTo);
        cmd.Parameters.AddWithValue("@from", emailFrom);
        cmd.Parameters.AddWithValue("@subject", emailSubject);
        cmd.Parameters.AddWithValue("@date", emailSentDate);
        cmd.ExecuteNonQuery();
}

新问题!

我已经设法创建了一个存储过程,谢谢大家,我只剩下一个问题了。

cmd.CommandType = CommandType.StoredProcedure; 

第二个CommandType下有一条红线,错误为

当前上下文中不存在名称“CommandType”

请帮忙。

4

4 回答 4

4

On your server Create a procedure using the code below:

CREATE PROCEDURE InsertProc
(
@id <put here the datatype>, 
@to <put here the datatype>, 
@from <put here the datatype>, 
@subject <put here the datatype>, 
@date <put here the datatype>
)
AS
INSERT INTO Emails_Log (Email_ID, e_To, e_From, e_Subject, e_Date) 
        VALUES (@id, @to, @from, @subject, @date)

after you have created the procedure, in your code try this:

// other codes
cmd.CommandText = "InsertProc";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", emailID);
cmd.Parameters.AddWithValue("@to", emailTo);
cmd.Parameters.AddWithValue("@from", emailFrom);
cmd.Parameters.AddWithValue("@subject", emailSubject);
cmd.Parameters.AddWithValue("@date", emailSentDate);
cmd.ExecuteNonQuery();
于 2012-05-09T07:32:51.177 回答
3

最常见的是,您将拥有一个可以应用于服务器的 sql 脚本(或一系列增量脚本),创建包括 sprocs 之类的对象;然后,只是(也许在 SSMS 中):

use [Email Database]
create proc SomeNameHere
      -- note these lengths are made up
      @id int, @to nvarchar(400), @from nvarchar(400),
      @subject nvarchar(2000), @date datetime
as
    INSERT INTO Emails_Log
    (Email_ID, e_To, e_From, e_Subject, e_Date) 
    VALUES
    (@id, @to, @from, @subject, @date)
go

然而!我还会说“为什么要让它成为一个 sproc?” - 除非你有充分的理由,否则我真正挑战一切都必须是 sproc 的想法。特别是,它使维护(尤其是在不同服务器可能处于不同阶段的部署场景中)更加困难。当您想要进行非平凡的处理时,Sprocs 很好,不想通过线路传输大量数据,并且它具有非平凡的长度 - 但我个人不会只为这个插入使用一个,除非它是严格的地方政策。

然后,在您的命令中,将 设置CommandType为存储过程,并将其设置"SomeNameHere"CommandText.

于 2012-05-09T07:31:33.357 回答
1

存储过程存储在 sql server 中。首先,您必须在 sql server 中创建存储过程。在这里您可以看到如何创建存储过程。然后你需要在c#中调用存储过程在这里你可以看到如何调用保存在ms sql server中的存储过程。希望能帮助到你。

于 2012-05-09T07:34:48.720 回答
0

错误“当前上下文中不存在名称‘CommandType’”是由缺少命名空间引起的。只需添加“使用 System.Data;” 在上面,它会起作用。

于 2013-08-27T15:12:54.660 回答