我在一个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() ,还需要做什么,不能在一个窗体中执行两次吗?
我需要在界面初始化 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() ,还需要做什么,不能在一个窗体中执行两次吗?
{
try
{
// 加上這一句,原來的代碼裏面,每次點一下button,sqlcom的參數就加一,那再點100次,不是有100個參數了?正確的做法就是如果參數不為空,則清空
if (sqlCom.Parameters.Count > 0)
{
sqlCom.Parameters.Clear();
}
}
}