日期:2014-05-18  浏览次数:20428 次

executescalar()的问题
问题:若按ClNo字段查询到相应记录ClType字段(代表权限)没有赋值,则提示(string)若要将数值强制转换为字符串型,则至少是小于无限大的数。可是我的ClType定义的是varchar(2)。
当查询出的ClType为"0"或"1"时程序完全正常。
请帮我分析分析什么原因。搜了一些,好像是没赋值的字段都是DBNull。但我不知道怎么用它判断啊。 

protected void Page_Load(object sender, EventArgs e)
  {
  string dt = DateTime.Now.ToString();
  lbDate.Text = "当前日期:" + dt;

  HttpCookie cn = Request.Cookies["clno"];
  if (cn != null)
  {
  string cltype;
   
  lbName.Text = cn.Values["ClNo"] + "你好!";

  //show the view reference to the cltype  
  SqlConnection con = new SqlConnection("Data Source=XY;Initial Catalog=ProManDB;Integrated Security=True");
  string sql = "SELECT ClType FROM [Clerk] WHERE ClNo='{0}'";
  sql = string.Format(sql,cn.Values["ClNo"]);
  SqlCommand cmd=new SqlCommand(sql,con);
  con.Open();
   
  try
  {
  cltype = (string)cmd.ExecuteScalar();
  }
   
  finally
  {
  con.Close();
  }
   
  if (cltype != null)
  {
  if (cltype == "0")
  lbName.Text += "您是管理员,可以对所有数据进行管理,操作请慎重!";
  else
  {
  if (cltype == "1")
  Menu1.Items[0].Enabled = false;
  else
  if (cltype == "2")
  {
  Menu1.Items[0].Enabled = false;
  Menu1.Items[1].Enabled = false;
  }
  }
  }
  else
  {

  lbName.Text+= "暂无权限!";
  }

  }
  else
  {
  lbName.Text = "nobody is login";

  //nothing is showing
  Menu1.Enabled = false;
  Menu1.Visible = false;
  GVCustomer.Enabled = false;
  GVCustomer.Visible = false;
  }
  }

------解决方案--------------------
用Convert.ToString()试试刊,另外,你出问题的时候,直接执行SELECT ClType FROM [Clerk] WHERE ClNo=xxx 显示出来的是什么呢?