none
将数据类型 varchar 转换为 numeric 时出错 RRS feed

  • 问题

  • 大家好,我是初学者,在调试代码的时候出现这个错误: 将数据类型 varchar 转换为 numeric 时出错。

      sqlstr = "SELECT * FROM TestClassifyItems WHERE (TestItem_ID = '" + testItemListBox.SelectedValue.ToString() + "')";

    备注:TestItem_ID字段类型是:numeric 长度是9

    应该怎么修改?各位版主帮帮忙。谢谢

    2010年2月23日 1:08

答案

  • 你好!

    这是因为你的  testItemListBox.SelectedValue 不是有效的数字格式。你跟踪一下看看最终形成的 SQL 应该就明白了。

    另外建议使用参数的形式

    sqlstr = "SELECT * FROM TestClassifyItems WHERE TestItem_ID = @TestItem_ID";

    YourCommand.Parameter.AddWithValue("@TestItem_ID",  testItemListBox.SelectedValue);

    知识改变命运,奋斗成就人生!
    2010年2月23日 1:27
    版主

全部回复

  • 看看 testItemListBox.SelectedValue.ToString() =? sql=?
    http://feiyun0112.cnblogs.com/
    2010年2月23日 1:23
    版主
  • 你好!

    这是因为你的  testItemListBox.SelectedValue 不是有效的数字格式。你跟踪一下看看最终形成的 SQL 应该就明白了。

    另外建议使用参数的形式

    sqlstr = "SELECT * FROM TestClassifyItems WHERE TestItem_ID = @TestItem_ID";

    YourCommand.Parameter.AddWithValue("@TestItem_ID",  testItemListBox.SelectedValue);

    知识改变命运,奋斗成就人生!
    2010年2月23日 1:27
    版主
  • SELECT * FROM TestClassifyItems WHERE (TestItem_ID = '')

    你看上面的语句 TestItem_ID 为数字类型,你用一个空字符串去匹配当然就错了。关键还在是参数的验证。

    int itemId;
    
    // 判断 SelectedValue 是否为有效的数字
    if (int.TryParse(testItemListBox.SelectedValue, out itemId))
    {
        using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM TestClassifyItems WHERE TestItem_ID = @Id"
            , "你的连接字符串"))
        {
            da.SelectCommand.Parameters.AddWithValue("@Id", itemId);
            DataSet ds = new DataSet();
            da.Fill(ds);
        }
    }
    else
    {
        throw new Exception("SelectedValue 不是有效的数字");
    }



    知识改变命运,奋斗成就人生!
    2010年2月23日 7:09
    版主