我在一个windows窗体的类中(.cs文件类)中加入一个内部方法获取一个string数组,
我需要在界面初始化 private void form_Load(object sender, EventArgs e)  和
按钮onclick事件    private void button_Click(object sender, EventArgs e)   都调用这个方法,如下:private string[] SelectChanged(string mtype)
        {
            try 
            {
                SqlCon.Open();
                SqlCom.CommandText = "ReadType";   /*我的存储过程名,里面只有一个参数*/
                SqlCom.CommandType = CommandType.StoredProcedure;
                SqlCom.Connection = SqlCon;                SqlParameter para = new SqlParameter("@type", SqlDbType.VarChar, 100);
                para.Value = mtype;                SqlCom.Parameters.Add(para);                string[]  TempStype = (SqlCom.ExecuteScalar().ToString()).Split(';');                return TempStype;            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return null;
            }
            finally {SqlCon.Close(); }
        }在窗口初始化的时候,这个方法是可以执行的,结果都出来了,证明连接数据库没有问题,但我再点击Button时,他会提示,说“为ReadType 过程提供过多的参数”。我想应该是初始化的时候执行过,SqlCommand 对象SqlCom没有删除,还是别的情况,我把SqlCon.Close() ,还需要做什么,不能在一个窗体中执行两次吗?

解决方案 »

  1.   

    private string[] SelectChanged(string mtype)
    {
    try
    {
      // 加上這一句,原來的代碼裏面,每次點一下button,sqlcom的參數就加一,那再點100次,不是有100個參數了?正確的做法就是如果參數不為空,則清空
     if (sqlCom.Parameters.Count > 0)
     {
        sqlCom.Parameters.Clear();
     }
    }
    }
      

  2.   

    SqlCom在段内重新定义就可以了SqlCom为全局变量时,直接在过程开始时设置 SqlCom = null;