2

私のC#Webアプリケーションには、ユーザーが1つのテキストボックス(named txtFirst)に名前を入力し、別のテキストボックス(named txtLast)に名前を入力する単純なページがあります。2つのテキストボックスにこの情報を入力した後、データをSQLデータベースに保存する[続行]ボタンをクリックします。私の問題は、これらの値をSQLに保存しようとしていることです。「値」テーブル(列は、、、PersonIDおよびAttributeIDValueと「属性」テーブル(列は主キーAttributeIDおよびAttributeName)があります。

私の属性テーブルには、次のものがあります。

AttributeID:   AttributeName: 
    1            FirstName 
    2            LastName

私の目標は、これをValueテーブルに次のように保存することです。

PersonID:       AttributeID:             Value: 
    A                1                     FirstName Value Here
    B                2                     LastName Value Here

データをストアドプロシージャに直接渡すことでデータを保存する方法を知っていますが、AttributeIDを正しく割り当てるにはどうすればよいですか?(例:AttributeID = 1forFirstNameおよびAttributeID = 2for LastName)。AttributeIDアプリケーションのテキストボックスに特定の、またはそれによってさえも割り当てることができる方法はありAttributeNameますか?本当にありがとう。

紛らわしいかもしれませんが、ここでの考え方は、ボタンがクリックされたときに、FirstNameに関連付けられたAttributeIDをテーブルからプルしてから、値とプルしたAttributeIDをテーブル「Value」に保存することです。ありがとう

4

2 に答える 2

1

それぞれのAttributeIDをそれぞれのテキストボックスのTagプロパティに押し込みます。それはハックですが、それは仕事を成し遂げます。ただし、タグを取得するときは、タグに格納されている値を適切なタイプにキャストする必要があります。

A..Tagプロパティを設定します。

txtFirst.Tag = firstNameAttributeID;
txtLast.Tag = lastNameAttributeID;

B. .Tagプロパティを取得します(たとえば、両方がintであると仮定します)。

firstNameAttributeID = (int)txtFirst.Tag;
lastNameAttributeID = (int)txtLast.Tag;

私が言ったように、あなたはおそらくこの仕事をすることができます。しかし、私は最初にあなたのデザインを調べるかもしれません。あなたの個人エンティティは、これらのそれぞれに指定されたフィールドを持っている必要があるように私には思えます。

于 2013-01-07T23:35:49.813 に答える
0

私はそれらをまたはあなたがしていることに応じて保存しViewStateます:Session

//Code to get the values from the database.
Session("FirstNamePersionId") = fnamePId;
Session("FirstNameAttributeId") = fnameAId;
Session("LastNamePersionId") = lnamePId;
Session("LastNamePersionId") = lnameAId;
//other code.

次に、使用するだけでアクセスするSession("FirstNamePersionId")か、値と呼んでいるものにアクセスします。

ViewStateまたはプロパティへの呼び出しをラップして、Session保守と読み取りを容易にします。

例が必要な場合はお知らせください。

更新
データベースから値を取得するには、次のことを試してください。

int fNameId = -1, lNameId = -1;
SqlConnection sqlConn = new SqlConnection(conString);//conString is the connection string for your DB.  This should be the same as what you use to execute the stored procedure.
SqlCommand sqlQuery = new SqlCommand("SELECT AttributeID, AttributeName FROM Attribute WHERE AttributeName IN ('FirstName','LastName')", sqlConn);
SqlDataReader sqlReader;

sqlConn.Open();
sqlReader = sqlQuery.ExecuteReader();
if (sqlReader.HasRows)
{
    while (sqlReader.Read())
    {
        if (sqlReader[1].ToString().Equals("FirstName", StringComparison.CurrentCultureIgnoreCase))
        {
            fNameId = (int)fNameId;
        }
        else if (sqlReader[1].ToString().Equals("LastName", StringComparison.CurrentCultureIgnoreCase))
        {
            lNameId = (int)fNameId;
        }
    }
}
sqlReader.Close();
sqlConn.Close();

必要に応じて、IDごとに個別の呼び出しを行うことができますが、これにより処理のオーバーヘッドが少し追加されます。2回呼び出す場合は、同じコマンドを使用することをお勧めしSqlConnectionますが、新しいコマンドを作成する必要があります。
idで結果にアクセスすること(私が使用したようにsqlReader[1])は時々眉をひそめます。SQLクエリで列の順序を宣言しているので、個人的には気にしません。
これは、LINQ2SQLを使用するとおそらく簡単になります。
間違いや見逃したことがあれば教えてください。

于 2013-01-07T23:58:32.460 に答える