【问题标题】:Error Specified cast is not valid错误指定的强制转换无效
【发布时间】:2013-07-18 08:55:37
【问题描述】:

我有以下功能

SqlConnection cn = new SqlConnection(constring);
cn.Open();
SqlCommand cmd = new SqlCommand("select max(ID) from EP_PATTERNS ", cn);
int h = (int)cmd.ExecuteScalar() + 1;
txtID.Text = h.ToString();
cn.Close();

如何解决此错误:

指定的演员表无效。

【问题讨论】:

  • 您必须指定异常发生的位置。
  • int h = (int)cmd.ExecuteScalar() + 1;
  • 请详细说明错误,可能在代码的另一部分,是编译器错误还是运行时异常
  • 如果表为空,则返回值为DBNull.Value。这将导致此异常。您必须在回退到 0 之前检查这一点。
  • 在调试此类错误时,最好先在 SQL IDE 中测试您的 SQL 代码。

标签: c#


【解决方案1】:

鉴于您的代码,我认为修复逻辑的最简单方法是将 SQL 编辑为

select ISNULL(max(ID),0) from EP_PATTERNS

为了更好地理解这是什么,您可以在 SSMS 中运行此 SQL:

DECLARE @table table (ID int);
SELECT MAX(ID) FROM @table;
SELECT ISNULL(MAX(ID), 0) FROM @table;

【讨论】:

    【解决方案2】:

    EP_PATTERNS 是否包含任何行?否则,您尝试将 NULL 转换为 int 并失败。

    您的代码应如下所示:

    SqlConnection cn = new SqlConnection(constring);
    cn.Open();
    SqlCommand cmd = new SqlCommand("select max(ID) from EP_PATTERNS ", cn);
    var value = (int?)cmd.ExecuteScalar();
    int maxId = value.HasValue ? value.Value + 1 : 0;  //Increase value or default it to zero
    txtID.Text = maxId.ToString();
    cn.Close();
    

    【讨论】:

      【解决方案3】:

      使用coalesce 可以实现:

      con.Open();
      cmd.Connection = con;
      cmd.CommandText = "select coalesce(max(user_id),0)+1 from user_master";
      int user_id = int.Parse(cmd.ExecuteScalar().ToString());
      txt_user_id.Text = user_id.ToString();
      con.Close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        相关资源
        最近更新 更多