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

关于sqlcommand的奇怪问题!!请各位帮帮忙!!
我现在datacon类中定义了一个public int procomAddress(string comtext,int fid,string str_linkname)这个函数
C# code
 
public int procomAddress(string comtext,int fid,string str_linkname)
        {
            int i = 0;
            using (sqlcom)
            {
                try
                {
                    sqlcom.CommandType = CommandType.StoredProcedure;
                    sqlcom.CommandText = comtext;
                    SqlParameter[] prams =
                                    {                        
                                        new SqlParameter("@fid",SqlDbType.Int),
                                        new SqlParameter("@file_file",SqlDbType.VarChar,100),
                                        new SqlParameter("@ret",SqlDbType.Int)
                                    };
                    prams[0].Value = fid;
                    prams[1].Value = str_linkname;
                    prams[2].Direction = ParameterDirection.Output;
                    foreach (SqlParameter parmameter in prams)
                    {
                        sqlcom.Parameters.Add(parmameter);
                    }
                    //SqlParameter sqlpar = sqlcom.Parameters.Add("@Return", SqlDbType.Int);
                   // sqlpar.Direction = ParameterDirection.ReturnValue;
                    sqlcom.ExecuteNonQuery();
                    i = Convert.ToInt16(sqlcom.Parameters["@ret"].Value.ToString());
                    sqlcom.Dispose();
                    return i;
                    
                }

                catch (Exception eu)
                {
                    MessageBox.Show("信息有误!");
                    MessageBox.Show(eu.ToString());
                    return i;
                }

            }
        }


我用datacon.procomAddress("file_insertfileaddress",fid,str_linkname);和
datacon.procomAddress("file_deletefileaddress", fid, str_linkname);分别完成插入和删除两项功能
运行程序时若要是插入了,不退出程序立马删除就报错说我指定了过多参数,如果退出程序再执行则正常不知为何,请各位指教!!


------解决方案--------------------
第一.sqlcom实例化没有? sqlComamnd sqlcom=new sqlComand("SQL语句",sqlconn);

第二.你用了 using (sqlcom)就可以不用sqlcom.Dispose()了;

第三.你执行sqlcom.ExecuteNonQuery()是有没有打开数据库连接sqlconn.open();并且执行完要关闭连接sqlconn.close();



------解决方案--------------------
using (SqlCommand sqlcom = new SqlCommand)换下

试试
------解决方案--------------------
sqlcom 这个你用的是全局的吧.

在方法里现用现new吧.
------解决方案--------------------
你看一下你的SqlParameters[] 数组 parms 将断点设置在sqlcom.ExecuteNonQuery();
看以下 parms在多次执行后有几个元素
------解决方案--------------------
你应该在执行结束后,及时地清空或者释放掉parms数组 否则 就会出现设置参数过多的现象