cmd.SqlParameter.Add 另一个 SqlParameterCollection 中已包含 SqlParameter 问题

15 篇文章 0 订阅

直接说问题:调用DBHelper类时,在一个同一个方法中调用了两个数据操作方法,以下为测试代码:

调用代码:

    class Program
    {
        static void Main(string[] args)
        {
            string sql = "SELECT * FROM dbo.LS_StatementDetail WHERE ApplyCode=@ApplyCode AND ObjectCode=@ObjectCode";
            SqlParameter [] parameter= {
            new SqlParameter("@ApplyCode","C20180202100321292"),
            new SqlParameter("@ObjectCode","20180202163627977")
            };
            int i=api.DBHelper.SQLHelper.ExecuteNonQuery(sql,parameter);
            DataTable dt = api.DBHelper.SQLHelper.ExecuteDataTable(sql, parameter);
            Console.WriteLine("parameter", parameter);
            Console.WriteLine("影响的行数i:{0}", i);
            Console.ReadLine();
        }    
    }

数据库帮助类中的两个操作方法:

方法一:
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) 
        {
            String connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnStr"].ToString();
            SqlConnection conn = null;
            conn = new SqlConnection(connectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd = conn.CreateCommand();
            cmd.CommandText = sql;
            //cmd.Parameters.Clear();
            foreach (SqlParameter parameter in parameters)
            {
                  cmd.Parameters.Add(parameter);
            } 
            int i= cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return i;
        }
方法二:
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            String connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnStr"].ToString();
            SqlConnection conn = null;
            using (conn = new SqlConnection(connectionString))
            {
                conn.Open(); 
                SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                //cmd.Parameters.Clear();
                foreach (SqlParameter parameter in parameters)
                {
                    cmd.Parameters.Add(parameter);
                }
                DataSet dataset = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                adapter.Fill(dataset);
                DataTable dt = dataset.Tables[0];
                cmd.Parameters.Clear();
                return dt;
            }
        }
奇怪的问题就来了:我在方法的前面Clear(),就没有效果依然会报错,而我在方法的后面Clear()便成功清理了参数。希望查阅资料后能找出答案,路过的大神看到也请指教下,不过好在问题是解决了。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值