【问题标题】:Convert textbox text to integer将文本框文本转换为整数
【发布时间】:2010-08-23 15:09:39
【问题描述】:

我需要将我的 xaml 代码文本框中的文本转换为 C# 中的整数值。我正在使用 .NET 4.0 和 Visual Studio 2010。有没有办法在 xaml 标签本身中做到这一点,或者我需要用 C 语言编写一个转换器。我尝试了以下但不工作:

Convert.ToInt32(this.txtboxname.Text)

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 我忘了提到我在后端使用的是 SQL Server 2008。我需要将此转换用于“int”类型的 sql server 字段。我希望我很清楚。再次感谢。
  • 你的意思是它不工作?谁在使用这些数据?您是在调用存储过程,还是需要使用 int 调用 repo 方法?
  • 我的意思是我将此 int 作为参数传递给 sql server 2008 中的存储过程。但我收到此错误“过程或函数 'name_of_SP' 需要参数 '@par_name',这不是提供。”
  • 检查参数名称的拼写。
  • 是的,我这样做了,因为我知道它区分大小写。仅供参考,这是我从 C# 调用 SP 的方式。公共字符串 my_method_name(int my_int_value) { return (string)this.ExecScalar("dbo.usp_some_name_here", this.CreateParameter("@argument_name",my_int_value)); }

标签: c# sql-server stored-procedures type-conversion


【解决方案1】:

建议在发送到 SQL Server 之前在代码隐藏中执行此操作。

 int userVal = int.Parse(txtboxname.Text);

也许尝试解析并选择性地让用户知道。

int? userVal;
if (int.TryParse(txtboxname.Text, out userVal) 
{
  DoSomething(userVal.Value);
}
else
{ MessageBox.Show("Hey, we need an int over here.");   }

您注意到的异常意味着您没有在对存储过程的调用中包含该值。尝试在调用生成 SQL Server 调用的代码时在代码中设置调试器断点。

确保您实际将参数附加到 SqlCommand。

using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@ParamName", SqlDbType.Int);
    cmd.Parameters["@ParamName"].Value = newName;        
    conn.Open();
    string someReturn = (string)cmd.ExecuteScalar();        
}

也许在您的数据库上启动 SQL Profiler 以检查正在发送/执行的 SQL 语句。

【讨论】:

  • 我也做了同样的事情。我仍然遇到同样的错误。我确信这不是整数问题。它被转换得很好,并被传递给调用存储过程的方法(DoSomething(),正如你在此处提到的)。我在这个方法上设置了一个断点,参数似乎是一个整数值。然而,对存储过程的调用仍然失败,并出现与上述相同的错误。
  • 如果我从 sql server 2008 环境运行存储过程,它运行良好。 exec stored_procedure_name 7654 或任何其他整数值,而不是 7654。
  • @VP:您的参数附加到调用可能有问题?
  • 让我试着检查一下我是否能做到你想说的。我会尽快回信
【解决方案2】:
int num = int.Parse(textBox.Text);

试试这个。它对我有用

【讨论】:

    【解决方案3】:

    您不需要编写转换器,只需在您的处理程序/代码隐藏中执行此操作:

    int i = Convert.ToInt32(txtMyTextBox.Text);
    

    int i = int.Parse(txtMyTextBox.Text);
    

    你的文本框的Text属性是String类型,所以你必须在代码中进行转换。

    【讨论】:

    • 我认为您提供的第一个解决方案 (int i = Convert. . . . .) 与 OP 说他尝试过的解决方案相同。
    • @Alex:是的。 OP 有正确的方法,但想知道是否可以在 XAML 中完成同样的事情。不能。
    【解决方案4】:

    例子:

    int x = Convert.ToInt32(this.txtboxname.Text) + 1 //You dont need the "this"
    txtboxname.Text = x.ToString();
    

    x.ToString() 将整数转换为字符串以在文本框中显示。

    结果:

    1. 您在文本框中输入了数字。
    2. 您单击按钮或运行该功能的东西。
    3. 您在文本框中看到您的号码比您的号码大一。

    :)

    【讨论】:

      【解决方案5】:

      如果您的 SQL 数据库允许该字段的 Null 值,请尝试像这样使用 int? value

      if (this.txtboxname.Text == "" || this.txtboxname.text == null)
           value = null;
      else
           value = Convert.ToInt32(this.txtboxname.Text);
      

      注意空值的 Convert.ToInt32 返回 0 !

      Convert.ToInt32(null) returns 0
      

      【讨论】:

      • 不,它不允许为空。我在转换它之前在我的 c# 代码中验证它。
      • txtboxname.text 必须写为第一个:txtboxname.Text
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多