0

シングルクリック、人、教育、経験、参照で複数のテーブルにデータを送信するフォームがあります。

複数のテーブルにデータを追加して、すべてのテーブルに同じ人物 ID を含めるにはどうすればよいですか?

私は初心者で、階層アーキテクチャを使用しています。すべてのデータベース コードは DAL です。) Asp 2.0 で作業しています。

Person に挿入して PersonID を出力パラメーターとして取得するストアド プロシージャを使用して実行することを考えていますが、その出力パラメーターを使用して他のテーブルに挿入する方法がわかりません。

私のサンプルコードはこれです

public virtual bool AddJobApplication(int JobID, string Name, string FatherName, string Phone, string Email, string Address, int AppID) {

            obj_db2.objCmd.CommandText = "AddApplication";
            obj_db2.objCmd.CommandType = CommandType.StoredProcedure;
            obj_db2.objCmd.Parameters.AddWithValue("JjobID", JobID);
            obj_db2.objCmd.Parameters.AddWithValue("@Name", Name);
            obj_db2.objCmd.Parameters.AddWithValue("@FName", FatherName);
            obj_db2.objCmd.Parameters.AddWithValue("@Email", Email );
            obj_db2.objCmd.Parameters.AddWithValue("@Address", Address);
            obj_db2.objCmd.Parameters.AddWithValue("@Phone", Phone);
            SqlParameter param = new SqlParameter("@AppID", AppID);
            param.Direction = ParameterDirection.Output;
            param.ParameterName = "@AppID";
            param.DbType = DbType.Int32;
            obj_db2.objCmd.Parameters.Add(param);
            obj_db2.objCmd.ExecuteNonQuery();

}

DAL にこの関数があり、出力パラメーターとしてパラメーターを取得しています。コード ビハインドからこの AddJobApplication にアクセスしてフォーム情報を入力できることはわかっていますが、この出力を使用して挿入する方法の要点がわかりません。非常に低レベルですが、助けが必要です。

4

2 に答える 2

0

ストアド プロシージャは、これを行う正しい方法です。ストアド プロシージャを配置したら、insert メソッドで出力パラメータを定義します。

以下は、ブログ投稿を挿入し、SQL によって作成された ID を取得する方法の例です。

例 (ブログ投稿の挿入):

 public int InsertArticle(ArticleItem articleitem)
    {
        SqlParameter articleid = new SqlParameter(Parameters.ArticleID, SqlDbType.Int);
        articleid.Direction = ParameterDirection.Output;

        SqlHelper.ExecuteNonQuery(Conn, CommandType.StoredProcedure, INSERT_ARTICLE,
                                  new SqlParameter(Parameters.Body, articleitem.Body),
                                  new SqlParameter(Parameters.Category, articleitem.Category),
                                  new SqlParameter(Parameters.ExpireDate, articleitem.ExpireDate),
                                  new SqlParameter(Parameters.PublishDate, articleitem.PublishDate),
                                  new SqlParameter(Parameters.Published, articleitem.Published),
                                  new SqlParameter(Parameters.Section, articleitem.Section),
                                  new SqlParameter(Parameters.Title, articleitem.Title),
                                  articleid);
        return (int)articleid.Value;
    }

コードの呼び出し

public void InsertAllTheThings()
{
    var articleId = InsertArticle(articleItem); //Insert an article, return the ID
    //Once you have the id, use it as needed.
    var data = new SomeAwesomeData();
    data.ArticleID = articleId;
    data.IsAwesome = true;
    InsertSomeRelatedData(data);
}   
于 2013-02-12T17:17:32.430 に答える
0

それは、確立されたアーキテクチャに大きく依存します。

より簡単な場合は、出力パラメーターを使用する代わりに、新しいレコードの ID を返すことができます。

INSERT INTO Person (
    FirstName,
    LastName
)
VALUES (
    'James',
    'Johnson'
)

SELECT @@IDENTITY --return the identifier of the new record

ただし、複数のテーブルを更新する場合は、すべてが単一のトランザクションのスコープ内で行われるようにしてください。

于 2013-02-12T17:20:55.250 に答える