0

次のコードがあり、ストアドプロシージャにしたいと思います。

次のコードがメソッド呼び出しのようになるように、ストアドプロシージャを作成して呼び出すにはどうすればよいですか。

ストアドプロシージャは、VisualStudioまたはMSSQL 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();
}

新しい質問!

おかげで、ストアドプロシージャを作成できました。もう1つ問題が残っています。

cmd.CommandType = CommandType.StoredProcedure; 

2番目のCommandTypeの下に赤い線があり、エラーは次のようになります。

'CommandType'という名前は現在のコンテキストに存在しません

助けてください。

4

4 に答える 4

4

サーバー上で以下のコードを使用してプロシージャを作成します。

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)

プロシージャを作成したら、コードで次のことを試してください。

// 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でなければならないという考えに真剣に挑戦します。特に、メンテナンス(特に、さまざまなサーバーがさまざまな段階にある可能性がある展開シナリオ)が困難になります。Sprocは、重要な処理を実行したい場合、大量のデータをネットワーク経由で転送したくない場合、および重要な長さを持っている場合に適していますが、個人的には、この挿入のためだけに使用することはありません。厳格なローカルポリシー。

次に、コマンドで、CommandTypeストアドプロシージャを設定"SomeNameHere"し、として設定しCommandTextます。

于 2012-05-09T07:31:33.357 に答える
1

ストアドプロシージャはSQLサーバーに保存されます。まず、SQLサーバーでストアドプロシージャを作成する必要があります。ここでは、ストアドプロシージャを作成する方法を確認できます。次に、c#でストアドプロシージャを呼び出す必要があります。ここでは、mssqlサーバーに保存されているストアドプロシージャを呼び出す方法を確認できます。それが役に立てば幸い。

于 2012-05-09T07:34:48.720 に答える
0

「名前'CommandType'は現在のコンテキストに存在しません」というエラーは、名前空間が見つからないことが原因で発生します。「usingSystem.Data;」を追加するだけです。上に、それは動作します。

于 2013-08-27T15:12:54.660 に答える