在我的C#Web应用程序中,我有一个简单的页面,用户在一个文本框中输入他们的名字(名为txtFirst
),在另一个文本框中输入他们的姓氏(名为txtLast
)。在两个文本框中输入此信息后,他们单击一个继续按钮,将数据保存到SQL数据库。我的问题是尝试在SQL中保存这些值。我有一个“值”表(列为PersonID
,AttributeID
和Value
)和“属性”表(列是主键AttributeID
和{{1 }})。
在我的属性表中,我有以下内容:
AttributeName
我的目标是将此保存在Value表中:
AttributeID: AttributeName:
1 FirstName
2 LastName
我知道如何通过直接将数据传递到存储过程来保存数据,但是如何才能正确分配AttributeID? (示例:PersonID: AttributeID: Value:
A 1 FirstName Value Here
B 2 LastName Value Here
为AttributeID = 1
,FirstName
为AttributeID = 2
。有没有办法可以将应用程序中的文本框分配给特定LastName
甚至AttributeID
?非常感谢。
这可能令人困惑,但这里的想法是,当单击按钮时,它从表中提取与FirstName关联的AttributeID,然后保存值并将表中的AttributeID拉出“值”。感谢
答案 0 :(得分:1)
将每个的AttributeID塞入每个相应文本框的Tag属性中。这是一个黑客,但它将完成工作。但是,在检索时,您需要将存储在标记中的值转换为正确的类型:
一个。设置.Tag属性:
txtFirst.Tag = firstNameAttributeID;
txtLast.Tag = lastNameAttributeID;
B中。检索.Tag属性(例如,假设两者都是整数):
firstNameAttributeID = (int)txtFirst.Tag;
lastNameAttributeID = (int)txtLast.Tag;
就像我说的那样,你可以做到这一点。但我可能会先检查你的设计。在我看来,你的人员实体应该为这些事情指定字段。
答案 1 :(得分: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单独调用,但这会增加一些处理开销。如果您确实拨打了两个电话,那么我建议使用相同的SqlConnection
,但您需要创建一个新命令
通过id访问结果(正如我使用sqlReader[1]
所做的那样)有时不受欢迎。我个人不担心,因为我在SQL查询中声明了列顺序
使用LINQ2SQL可能会更容易
如果我犯了任何错误或遗漏任何错误,请告诉我。