窗体中有两个listview控件 当点击listview2中的某条记录时,listview1中就显示出相应的记录,可以,系统总提示我commandText属性尚未初始化,请问这是什么原因啊?! 代码如下: 请问代码有问题吗?! 谢谢!
private void Xflist()
        {
                       for (int i = 0; i < this.listView2.Items.Count; i++)
            {
                
                if (this.listView2.Items[i].Selected == true)
                {
                    
                    this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'";
                    this.sqlCommand1.CommandText = this.selectStr1;                }
                
                    break;
            }                   
                    
                    try
                    {
                        this.sqlCommand1.CommandText = null;  
                        if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果connection1关闭就打开
                       this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容
                        while (this.SqlDataReader1.Read())
                        {
                            ListViewItem li = new ListViewItem();//生成新的listview的item
                            li.SubItems.Clear();//消除所有列的内容
                            li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容
                            li.SubItems.Add(SqlDataReader1["Xfitem"].ToString());
                            li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价
                            li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价
                            li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量
                            li.SubItems.Add(SqlDataReader1["Money"].ToString());
                            li.SubItems.Add(SqlDataReader1["FUs"].ToString());
                            li.SubItems.Add(SqlDataReader1["Bz"].ToString());
                            this.listView1.Items.Add(li);//把新记录添加到listview1中去                        }
                    }                    catch (System.Exception E)
                    {
                        MessageBox.Show(E.ToString());
                    }
                    finally
                    {                        this.sqlConnection1.Close();
                    }

解决方案 »

  1.   

    方法体外有没有 SqlCommand sqlcommand1 = new SqlCommand()?
      

  2.   

    断点一下,看看this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'";是什么
      

  3.   

    看看selectStr1的值是什么。 
      

  4.   

    看看selectStr1的值是什么。 
      

  5.   

    this.sqlCommand1.CommandText = null;  //???
      

  6.   

    你是不是这样做的 private SqlCommand sqlCommand1;
    没有private SqlCommand sqlCommand1 = new SqlCommand();
      

  7.   

     try 
                        { 
                            this.sqlCommand1.CommandText = null;  这是null了
                            if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果connection1关闭就打开 
                          this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容 
                            while (this.SqlDataReader1.Read()) 
                            { 
                                ListViewItem li = new ListViewItem();//生成新的listview的item 
                                li.SubItems.Clear();//消除所有列的内容 
                                li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容 
                                li.SubItems.Add(SqlDataReader1["Xfitem"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价 
                                li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价 
                                li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量 
                                li.SubItems.Add(SqlDataReader1["Money"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["FUs"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Bz"].ToString()); 
                                this.listView1.Items.Add(li);//把新记录添加到listview1中去                         } 
                        } 
      

  8.   

    this.sqlCommand1.CommandText = null; 
    这句去掉
      

  9.   

    就是这个原因,在try里面又清空了。
      

  10.   

    我把那行去掉了还是不行,显示     commandText属性尚未初始化  ,到底是哪里出问题了呢!?
      

  11.   

    sqlCommand1怎么来的?把这段代码发出来看一下。sqlCommand1=sqlConnection1.CreateCommand();
    上面有这样一段代码吗?
      

  12.   

    把break写到if条件成立的语句块中去            for (int i = 0; i < this.listView2.Items.Count; i++) 
                { 
                    
                    if (this.listView2.Items[i].Selected == true) 
                    { 
                        
                        this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'"; 
                        this.sqlCommand1.CommandText = this.selectStr1;                     break;                 } 
                    
                } 
      

  13.   

    try 
                        { 
                            this.sqlCommand1.CommandText = null;  这是null了 
                            if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果connection1关闭就打开 
                          this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容 
                            while (this.SqlDataReader1.Read()) 
                            { 
                                ListViewItem li = new ListViewItem();//生成新的listview的item 
                                li.SubItems.Clear();//消除所有列的内容 
                                li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容 
                                li.SubItems.Add(SqlDataReader1["Xfitem"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价 
                                li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价 
                                li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量 
                                li.SubItems.Add(SqlDataReader1["Money"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["FUs"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Bz"].ToString()); 
                                this.listView1.Items.Add(li);//把新记录添加到listview1中去                         } 
                        } this.sqlCommand1.CommandText = null;之后就没有给this.sqlCommand1.CommandText赋值
      

  14.   

    15楼是对的。。break在if语句外面,循环只跑了一次,this.sqlCommand1.CommandText可能还没赋上值。。
    另外,this.sqlCommand1.CommandText = null;肯定要去掉。
      

  15.   

    从你这段代码来看可能会有两个问题:for (int i = 0; i < this.listView2.Items.Count; i++)
    {
    if (this.listView2.Items[i].Selected == true)
    {
       
        this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'";
        this.sqlCommand1.CommandText = this.selectStr1;
                //break;似乎应该放在这里
    }
    break;       //这里循环跳出?似乎应该是放到if的括号里。
    }  
       
    try
    {
    this.sqlCommand1.CommandText = null;          //这里又==null这是什么意思?  
      

  16.   

    完整的代码是这样的
    namespace CanYinManager
    {
        public partial class FormMain : Form
        {
            private string selectStr1;        private SqlConnection sqlConnection1 = null;
             private SqlCommand sqlCommand1 = null;
     public FormMain()
            {
                //在构造函数中为变量赋值            InitializeComponent();//系统初始函数
                this.sqlConnection1 = new SqlConnection(CanYinManager.DataLevel.Connection.ConnString);
                this.sqlCommand1 = new SqlCommand();
                this.sqlCommand1.Connection = this.sqlConnection1;
            private void FormMain_Load(object sender, EventArgs e)
            { 
               this.UpdateListView();//更新listview显示内容
               this.Xflist();
            }
                       private void Xflist()
            {
                
                for (int i = 0; i < this.listView2.Items.Count;i++)
                {
                    
                    if (this.listView2.Items[i].Selected == true)
                    {
                        
                        this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'";
                        this.sqlCommand1.CommandText = this.selectStr1;
                        break;
                    }
                    
                        
                }                   
                        
                        try
                        {
                            
                           
                            if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果connection1关闭就打开
                           this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容
                            while (this.SqlDataReader1.Read())
                            {
                                ListViewItem li = new ListViewItem();//生成新的listview的item
                                li.SubItems.Clear();//消除所有列的内容
                                li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容
                                li.SubItems.Add(SqlDataReader1["Xfitem"].ToString());
                                li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价
                                li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价
                                li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量
                                li.SubItems.Add(SqlDataReader1["Money"].ToString());
                                li.SubItems.Add(SqlDataReader1["FUs"].ToString());
                                li.SubItems.Add(SqlDataReader1["Bz"].ToString());
                                this.listView1.Items.Add(li);//把新记录添加到listview1中去                        }
                        }                    catch (System.Exception E)
                        {
                            MessageBox.Show(E.ToString());
                        }
                        finally
                        {                        this.sqlConnection1.Close();
                        }          
            }
               
               
      }    
    }
      

  17.   

    这个是完整的,上面的那个少了一条语句,我加上了这条语句还是不行!
    namespace CanYinManager
    {
        public partial class FormMain : Form
        {
            private string selectStr1;        private SqlConnection sqlConnection1 = null;
             private SqlCommand sqlCommand1 = null;
           private SqlDataReader SqlDataReader1 = null;
     public FormMain()
            {
                //在构造函数中为变量赋值            InitializeComponent();//系统初始函数
                this.sqlConnection1 = new SqlConnection(CanYinManager.DataLevel.Connection.ConnString);
                this.sqlCommand1 = new SqlCommand();
                this.sqlCommand1.Connection = this.sqlConnection1;
            private void FormMain_Load(object sender, EventArgs e)
            { 
               this.UpdateListView();//更新listview显示内容
               this.Xflist();
            }
                       private void Xflist()
            {
                
                for (int i = 0; i < this.listView2.Items.Count;i++)
                {
                    
                    if (this.listView2.Items[i].Selected == true)
                    {
                        
                        this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems[0].Text.ToString() + "'";
                        this.sqlCommand1.CommandText = this.selectStr1;
                        break;
                    }
                    
                        
                }                   
                        
                        try
                        {
                            
                           
                            if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果connection1关闭就打开
                           this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容
                            while (this.SqlDataReader1.Read())
                            {
                                ListViewItem li = new ListViewItem();//生成新的listview的item
                                li.SubItems.Clear();//消除所有列的内容
                                li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容
                                li.SubItems.Add(SqlDataReader1["Xfitem"].ToString());
                                li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价
                                li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价
                                li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量
                                li.SubItems.Add(SqlDataReader1["Money"].ToString());
                                li.SubItems.Add(SqlDataReader1["FUs"].ToString());
                                li.SubItems.Add(SqlDataReader1["Bz"].ToString());
                                this.listView1.Items.Add(li);//把新记录添加到listview1中去                        }
                        }                    catch (System.Exception E)
                        {
                            MessageBox.Show(E.ToString());
                        }
                        finally
                        {                        this.sqlConnection1.Close();
                        }          
            }
               
               
      }    
    }
      

  18.   

    你的代码有问题,首先方法Xflist()不应该再form_load事件中调用,这样在窗体加载的时候,就运行了,而这个时候this.listView2.Items[i].Selected == true 这条语句永远为false, 也就是说if语句块压根就不会被执行,你的commandText当然就不会被赋值了。 你应该采用的是使用listview2的SelectedIndexChanged事件 在这个事件当中调用你的那个方法,并且你的方法写的太过笨重了,这个你可以考虑一下 缩减一下,因为你可以直接得到listView2的selectedItem的所以没有必要使用if语句for 语句 
    还有就是上边阁楼提到的 你在使用commandText之前又将其置空了,这样这个dommandText当然始终是null 你的程序就肯定报错了
      

  19.   

    namespace CanYinManager 

        public partial class FormMain : Form 
        { 
            private string selectStr1;         private SqlConnection sqlConnection1 = null; 
            private SqlCommand sqlCommand1 = null; 
          private SqlDataReader SqlDataReader1 = null; 
    public FormMain() 
            { 
                //在构造函数中为变量赋值             InitializeComponent();//系统初始函数 
                this.sqlConnection1 = new SqlConnection(CanYinManager.DataLevel.Connection.ConnString); 
                this.sqlCommand1 = new SqlCommand(); 
                this.sqlCommand1.Connection = this.sqlConnection1; 
            private void FormMain_Load(object sender, EventArgs e) 
            { 
              this.UpdateListView();//更新listview显示内容 
              this.Xflist(); //这个方法这里调用肯定会出错原因看代码红色部分 
            } 
                      private void Xflist() 
            { 
                
                for (int i = 0; i < this.listView2.Items.Count;i++) 
                { 
                    
                    if (this.listView2.Items[i].Selected == true) //你肯定这条语句始终是false
                    { 
                        
                        this.selectStr1 = "SELECT *  FROM Xfxm WHERE  Ctid='" + this.listView2.Items[i].SubItems [0].Text.ToString() + "'"; 
                        this.sqlCommand1.CommandText = this.selectStr1; 
                        break; 
                    } 
                    
                        
                }                   
                        
                        try 
                        { 
                            
                          
                            if (this.sqlConnection1.State == ConnectionState.Closed) this.sqlConnection1.Open(); //如果 connection1关闭就打开 
                          this.SqlDataReader1=this.sqlCommand1.ExecuteReader();  //用sqldatareadrer来读取数据库中的内容 
                            while (this.SqlDataReader1.Read()) 
                            { 
                                ListViewItem li = new ListViewItem();//生成新的listview的item 
                                li.SubItems.Clear();//消除所有列的内容 
                                li.SubItems[0].Text = SqlDataReader1["Ctid"].ToString();//给新记录第1列添加餐台号内容 
                                li.SubItems.Add(SqlDataReader1["Xfitem"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Dj"].ToString());//给新记录第2列添加单价 
                                li.SubItems.Add(SqlDataReader1["Dzbl"].ToString());//给新记录第3添加单价 
                                li.SubItems.Add(SqlDataReader1["Sl"].ToString());//给新记录第4列添加数量 
                                li.SubItems.Add(SqlDataReader1["Money"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["FUs"].ToString()); 
                                li.SubItems.Add(SqlDataReader1["Bz"].ToString()); 
                                this.listView1.Items.Add(li);//把新记录添加到listview1中去                         } 
                        }                     catch (System.Exception E) 
                        { 
                            MessageBox.Show(E.ToString()); 
                        } 
                        finally 
                        {                         this.sqlConnection1.Close(); 
                        }           
            } 
              
              
      }