2011-06-20 11 views
0

私はストアドプロシージャを開発するのが初めてです。私の試みでは私はちょっと心配しました。私は基本的に概念的には理解していますが、実装する際に問題があります。参考までに、私は手作業でコーディングしていますが、SQL Server、ASP.NET、およびC#テクノロジを使用する予定です。アカウントの作成/更新/削除/認証のためのストアドプロシージャ

基本的な考え方は、ユーザーが独自のユーザーアカウントを作成し、適切な情報を更新し、アカウントを削除し、必要に応じて情報を認証することです(ユーザー名&パスワード、アカウント情報など)。私はこれが4つの異なるストアドプロシージャで行われなければならないと推測します:createAccountmodAccountdelAccountauthentAccount

私の理解では、C#/ ASPは実際のデータ収集を行い、データベースに挿入するためにデータをSQLに転送する必要があります。私が間違っている場合、またはより効率的な方法がある場合は、私を修正してください(速度はこれにとって非常に重要です)。

が最初のストアドプロシージャ(作成)入門、私はこれをコード化:

CREATE PROC createAccount 
AS 
INSERT INTO Customer (cssn, first_name, middle_name, last_name, company, address, phone_number, email, account, occupation, nationality, social, successful_invites) 
VALUES() 
GO 

私は値のために何を入れますか? C#側で使用されている変数ですか?

このスペースにどのようにセキュリティを組み込むべきかもわかりませんし、セキュリティも重要になるでしょう。

例を説明することができれば、それは非常に役に立ちます。

+0

厳しいとは言えませんが、最初に基本的なことを学び、後でさらに具体的な質問をしてみませんか?そこには何百ものチュートリアルがあります(http://www.sql-server-performance.com/2003/stored-procedures-basics、http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson07など)。 aspx、およびその他)があります。これは、ここで期待できる5行のコメントよりも役立ちます。 – matk

答えて

0

ここにあなたのSPの基本的な形式(最初の3列が示さ)です:

create procedure createAccount 
(
    @cssn varchar(100), 
    @first_name varchar(100), 
    @last_name varchar(100), 
    ... -- remaining columns 
) 
as 
begin 
    insert into Customer (cssn, first_name, last_name, ...) 
    values (@cssn, @first_name, @last_name, ...) 
end 
0

ワンサイドノートでは、ASPは、ユーザーアカウントに建てられ、あなただけのものを(SqlMembershipProvider)を使用したい場合は自動的に設定されています。

CREATE PROCEDURE createAccount 
    @cssn VARCHAR(100) 
    , @first_name VARCHAR(100) 
    , @middle_name VARCHAR(100) 
    , @last_name VARCHAR(100) 
    , @company VARCHAR(100) 
    , @address VARCHAR(150) 
    , @phone_number VARCHAR(20) 
    , @email VARCHAR(100) 
    , @account VARCHAR(100) 
    , @occupation VARCHAR(100) 
    , @nationality VARCHAR(100) 
    , @social VARCHAR(100) 
    , @successful_invites INT 
AS 
BEGIN 
    INSERT INTO Customer (cssn, first_name, middle_name, last_name, company, address, phone_number, email, account, occupation, nationality, social, successful_invites) 
    VALUES (@cssn, @first_name, @middle_name, @last_name, @company, @address, @phone_number, @email, @account, @occupation, @nationality, @social, @successful_invites) 
END 

私はちょうどデータ型を推測しました。セキュリティに関しては、追加する必要があるのは再検証ルール(つまり、HTMLタグのブロックとVARCHARフィールドのもの)だけです。それ以外の場合、動的SQLを使用せずにパラメータと変数を使用しているため、セキュリティは自動的に組み込まれます。

0

SqlMembershipProviderを使用する場合は、既にasp.netにある一連のコントロールが役立ちます。顧客テーブルではなくテーブルを使用しなければならないかもしれませんが、メンバーシッププロバイダがすべてを処理するので、これは大丈夫です。メンバーシッププロバイダとログインコントロールの詳細については、googleをご覧ください。

ストアドプロシージャの例はありますが、ストアドプロシージャを使用する理由は何ですか? ORMは、はるかに簡単で生産的な方法です。私のお気に入りはNHiberntateです。 LINQ to SQL、Entity FrameworkはMicrosoftのものです。ちょうどそれがどのようになっているかを見るためには、 "linq to sql hello world"のgoogle

99.99%の場合、ORMはちょうど良いです。ORMをSQLクエリまたはspに置き換える必要があるケースはまれです。

0

ストアドプロシージャは、SQLスクリプトを中心的な場所に格納するのに便利です。これが基本的で最も簡単な概念です。あなたのコードに(更新テーブルセットEMAIL = '"+電子メール+"')のスクリプトがあるならば、あなたはストアドプロシージャを使う方が良いです。既存の/更新済みまたは新しく作成されたレコードのIDを返す同じ手順で追加と更新を行うこともできます。あなたはそれらと非常に創造的に得ることができます。

もちろん、安全であれば、同じ手順で更新や追加ができます。

create usp_AddEmail(
    @email varchar(50) 
) 
AS 
    DECLARE @EMAILID INT; 
    SET @EMAILID = (SELECT ID FROM TABLE WHERE EMAIL = @EMAIL); 
    IF ISNULL(@EMAILID,0) = 0 
    BEGIN 
     INSERT INTO TABLE(EMAIL) VALUES(@email); 
     SET @EMAILID = (SELECT ID FROM TABLE WHERE EMAIL = @EMAIL); 
    END 
    SELECT @EMAILID AS EMAILID 

C#では、CommandType = CommandType.StoredProcedureを使用して、ストアドプロシージャであることを通知します。次に、.Parameters.AddWithValue(sqlParameter、value)を使用して値を渡します。 (あなたはそれをメソッドにラップすることができます):

SqlConnection connLoc = new SqlConnection(YourConnectionSring); 
SqlCommand commLoc = new SqlCommand(); 
SqlDataReader drLoc; 

commLoc.Connection = connLoc; 
commLoc.CommandType = CommandType.StoredProcedure; 
commLoc.CommandText = "usp_AddEmail"; 
commLoc.Parameters.AddWithValue(@email, emailString); 
connLoc.Open(); 
drLoc = commLoc.ExecuteReader(CommandBehavior.CloseConnection); 
関連する問題