将C#文本框属性保存到SQL

时间:2013-01-07 23:09:12

标签: c# sql

在我的C#Web应用程序中,我有一个简单的页面,用户在一个文本框中输入他们的名字(名为txtFirst),在另一个文本框中输入他们的姓氏(名为txtLast)。在两个文本框中输入此信息后,他们单击一个继续按钮,将数据保存到SQL数据库。我的问题是尝试在SQL中保存这些值。我有一个“值”表(列为PersonIDAttributeIDValue)和“属性”表(列是主键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 = 1FirstNameAttributeID = 2。有没有办法可以将应用程序中的文本框分配给特定LastName甚至AttributeID?非常感谢。

这可能令人困惑,但这里的想法是,当单击按钮时,它从表中提取与FirstName关联的AttributeID,然后保存值并将表中的AttributeID拉出“值”。感谢

2 个答案:

答案 0 :(得分:1)

将每个的AttributeID塞入每个相应文本框的Tag属性中。这是一个黑客,但它将完成工作。但是,在检索时,您需要将存储在标记中的值转换为正确的类型:

一个。设置.Tag属性:

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

B中。检索.Tag属性(例如,假设两者都是整数):

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

就像我说的那样,你可以做到这一点。但我可能会先检查你的设计。在我看来,你的人员实体应该为这些事情指定字段。

答案 1 :(得分:0)

我会将它们存储在ViewStateSession中,具体取决于您的操作:

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

然后访问只使用Session("FirstNamePersionId")或您调用的值。

我会将调用包装到属性中的ViewStateSession,以便于维护和阅读。

如果您需要一个例子,请告诉我。

<强>更新
要从数据库中获取值,您可以尝试以下操作。

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可能会更容易 如果我犯了任何错误或遗漏任何错误,请告诉我。