private void select() 
        {
            try {
                string sql = String.Format("select ima_itemid,ima_itemname,IMA_PurLeadTime,IMA_MfgLeadTime,IMA_ItemStatusCode from item where ima_itemid like '{0}%'", textBox1.Text);
                SqlCommand command = new SqlCommand(sql,DBHelper.connection);
                DBHelper.connection.Open();
                SqlDataReader dataReader = command.ExecuteReader();
                listView1.Clear();
                string itemID;
                string itemName;
                string PurLeadTime;
                string MfgLeadTime;
                string itemStatus;
                string ItemStatusCode;
                string Active = "Active";
                while (dataReader.Read())
                {
                    itemID = (string)dataReader["ima_itemid"];
                    itemName = (string)dataReader["ima_itemname"];
                    PurLeadTime = (string)dataReader["IMA_PurLeadTime"];
                    MfgLeadTime = (string)dataReader["IMA_MfgLeadTime"];
                    ItemStatusCode = (string)dataReader["IMA_ItemStatusCode"];
                     itemStatus = (ItemStatusCode.Equals(Active)) ? "可用" : "非可用";                    ListViewItem list = new ListViewItem(itemID);
                    listView1.Tag = (string)dataReader["ima_itemid"];
                    listView1.Items.Add(list);
                    list.SubItems.AddRange(new string[] { itemName,PurLeadTime,MfgLeadTime,itemStatus });
                }
                dataReader.Close();
            }
            catch (Exception ex) {
                MessageBox.Show("连接失败","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            finally { DBHelper.connection.Close(); }
        
        
        }不知道为什么每次运行到PurLeadTime = (string)dataReader["IMA_PurLeadTime"];就跳到catch了。我单独运行sql是没问题的。IMA_PurLeadTime在数据库是int型的。我在这里把它转换为string不行吗?PurLeadTime 与MfgLeadTime 有一个是空值。应该不会是应为读到空值就跳到catch吧。

解决方案 »

  1.   

    为空是无法转换为string的!~~
      

  2.   


            PurLeadTime = dataReader["IMA_PurLeadTime"] == null ? "" : (string)dataReader["IMA_PurLeadTime"];
            MfgLeadTime = dataReader["IMA_MfgLeadTime"] == null ? "" : (string)dataReader["IMA_MfgLeadTime"]; 
      

  3.   

    把“链接失败”换成ex.Message看看到底是什么错
      

  4.   

    是报‘Unable to case object of type 'System.Int16' to type 'System.String'’.是不是PurLeadTime 与MfgLeadTime是int型不能转换成string?应该怎么写?
      

  5.   

    PurLeadTime = Convert.ToString(dataReader["IMA_PurLeadTime"]);
      

  6.   

    或者
    PurLeadTime = dataReader["IMA_PurLeadTime"].ToString();
      

  7.   

    对,,一般转化数据类型时用Convert.ToString()比较保险!~·
      

  8.   

    PurLeadTime = dataReader["IMA_PurLeadTime"].ToString();
    dataReader["IMA_PurLeadTime"] == DBNul.Value? "" : dataReader["IMA_PurLeadTime"].ToString();
      

  9.   

    谢谢,各位。可以通过了。但遇到其他问题。不知道怎么解,
                    ListViewItem list = new ListViewItem(itemID); 
                        list.Tag = (string)dataReader["ima_itemid"]; 
                        listView1.Items.Add(list); 
                        list.SubItems.AddRange(new string[] { itemName,PurLeadTime,MfgLeadTime,itemStatus });
    这段代码没结果出来。不知道为什么?listView1是ListView的name。sql没问题。