【问题标题】:Adding Integer from textbox to database c#将整数从文本框添加到数据库c#
【发布时间】:2013-03-31 00:33:07
【问题描述】:

我是 c# 的新手,在将整数从文本框获取到数据库时遇到了一些困难。

我创建了一个简单的表单,允许用户输入他们的名字、姓氏和年龄。

我可以通过 buttonClick 将 firstName 和 lastName 连接到数据库,但无法与年龄相同。这就是我所拥有的。

   private void AddTheNewInfoToDB()
    {
        using (DatabaseContainer db = new DatabaseContainer())
        {
            Users u = new Users();

            u.firstName = textboxfirstName.Text;
            u.lastName = textboxlastName.Text;
            u.Age = textboxAge.Text; 


            db.Users.AddObject(u);
            db.SaveChanges();
        }

执行此操作时,“textboxAge.Text”出现错误,提示“无法将 'string' 隐式转换为 'int'。”

我们将不胜感激有关解决此问题的建议。

【问题讨论】:

    标签: c# database


    【解决方案1】:
    u.Age = Int32.Parse(txtboxAge.Text);
    

    您遇到了问题,因为试图将字符串 (.Text) 分配给 Int (Age) 类型的变量。

    【讨论】:

    • 这会起作用,但请记住textboxAge.Text 可能不限于数字。如果它包含无效字符,它将抛出 FormatException
    • @Nathan,当然,但是应该 24/7 应用验证逻辑。如果他这样做了,则无需在 db 访问层中应用额外的检查来再次验证数据。
    【解决方案2】:

    试试:

    int age;
    int.TryParse(textboxAge.Text, out age); 
    u.Age = age;
    

    【讨论】:

    • 这是错误的。它应该是 int.TryParse(textboxAge.Text, out age); 并且不会将 age 设置为 0 age 将保持原样,事实上是 0。
    • 您认为修复错误输入的好习惯?因为这正是你正在做的。如果用户提供了错误的输入(例如字符串),您应该通知他并且不允许他发布到 db。但是,相反,您已经确定年龄 = 0 并实际更新数据库的人是有效的?
    • @walther:你的验证是和实际的数据库操作一起做的吗?我想应该在实际发布到 db 之前完成验证。此外,不管验证问题如何,TryParse 仍然是最有效的方法。
    • @Nathan:我邀请您在Reflector 中查看此内容。我相信你会意识到你刚才说的其实是不真实的。 TryParse 将在报告布尔结果之前将 out 变量设置为 0。
    • @code4life,准确地说,验证应该在之前完成。这意味着当您进行插入/更新时,您已经知道它包含指定范围内的整数 = 您不必尝试解析,简单解析即可。为什么你认为在这种特殊情况下解析更好?
    【解决方案3】:

    使用int.parse(textboxAge.Text);

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2016-10-20
      • 2018-04-17
      相关资源
      最近更新 更多