conn.Open();
            SqlCommand cmd = new SqlCommand(strsql, conn);
            int i;
            try
            {
               **********i = (int)cmd.ExecuteScalar();                       //执行SQL命令,返回第一行第一列,忽略其他行和列
            }
            catch (Exception ex)
            {
                conn.Close();
                MessageBox.Show(ex.Message);
                return 0;
            }
            conn.Close();
            return i;就是加星号的这一行,查询的时候会出错“未将对象引用设置到对象的实例”cmd是这样的"SELECT * FROM tb_prize WHERE UserId = '002' AND UserJFcontent = '234234234' AND UserJLMoney ='324234' AND UserJFDate = '2011/06/10'"但是如果只查一个字段就没有问题。如果原来有数据的话也没有问题。还请高手指教啊。

解决方案 »

  1.   

    ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。你的×肯定有问题了。典型的 ExecuteScalar 查询可以采用类似于下面的 C# 示例的格式: cmd.CommandText = "SELECT COUNT(*) FROM region";
     Int32 count = (Int32) cmd.ExecuteScalar();如果你想取得所有列或多列的话,使用ExecuteReader或使用DataSet都行。
      

  2.   

     楼主,如果你这数据集不存在即行数为零的话,就会报这个异常
       因此最好是要object类型老保存返回值
    object i= cmd.ExecuteScalar(); 
          if (i== null ) {
      //再往下走
      

  3.   

    "SELECT * FROM tb_prize WHERE UserId = '002' AND UserJFcontent = '234234234' AND UserJLMoney ='324234' AND UserJFDate = '2011/06/10'"因为当你的SQL查询没有结果的时候,无对象状态,隐式转换为int时,就报此异常。
      

  4.   

    object obj = cmd.ExecuteScalar();
    if (obj ==null)
      //为空
    else
      //不为空
      

  5.   

    返回第一行第一列为DB.NULL或者 结果无资料时会报这个错误.
      

  6.   

    i = (int)cmd.ExecuteScalar()==null?0:(int)cmd.ExecuteScalar(); 
      

  7.   

    if (LZ.Birthday == "1985")
                {
                    if (LZ.CodeAge >= 1)
                    {
                        Console.WriteLine("你说的没错,你确实有点菜了,不过不要灰心,加油哦!");
                    }
                }