首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# SqlParameter有关问题

2013-05-02 
C# SqlParameter问题在WinForm和WebForm里面我都是在项目里面创建一个操作类,如下:using Systemusing Sys

C# SqlParameter问题
在WinForm和WebForm里面我都是在项目里面创建一个操作类,如下:


using System;

using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace SmartSql
{
    public class Helper
    {
        private SqlConnection connection;
        public SqlConnection Connection
        {
            get
            {
                string connectionString = "server=;database=;uid=;pwd=";
                if (connection == null)
                {
                    connection = new SqlConnection(connectionString);
                    connection.Open();
                }
                else if (connection.State == System.Data.ConnectionState.Closed)
                {
                    connection.Open();
                }
                else if (connection.State == System.Data.ConnectionState.Broken)
                {
                    connection.Close();
                    connection.Open();
                }
                return connection;
            }
        }

  /// <summary>
        /// 执行SQL语句,返回受影响的行数。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句</param>
        /// <returns></returns>
        public int ExecuteCommand(string safeSql)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);


                int result = cmd.ExecuteNonQuery();
                return result;
            }
        }
        /// <summary>
        /// 执行SQL语句,返回受影响的行数。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>
        /// <returns></returns>
        public int ExecuteCommand(string safeSql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(values);
                return cmd.ExecuteNonQuery();
            }
        }

        /// <summary>
        /// 执行SQL语句,返回SQL语句查询后返回的一个对象。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句</param>
        /// <returns></returns>
        public string GetScalar(string safeSql)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);
                string result = cmd.ExecuteScalar().ToString();
                return result;
            }
        }

        /// <summary>
        /// 执行SQL语句,返回SQL语句查询后返回的一个对象。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>


        /// <returns></returns>
        public string GetScalar(string safeSql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(values);
                string result = cmd.ExecuteScalar().ToString();
                return result;
            }
        }

        /// <summary>
        /// 执行SQL语句,返回一个SQLReader。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句</param>
        /// <returns></returns>
        public SqlDataReader GetReader(string safeSql)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
        }


        /// <summary>
        /// 执行SQL语句,返回一个SQLReader。
        /// </summary>
        /// <param name="sql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>
        /// <returns></returns>
        public SqlDataReader GetReader(string sql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.CommandType = CommandType.StoredProcedure;


                cmd.Parameters.AddRange(values);
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }

        }


        /// <summary>
        /// 执行SQL语句,返回执行SQL语句之后的一张表。
        /// </summary>
        /// <param name="safeSql">执行的SQL语句</param>
        /// <returns></returns>
        public DataTable GetDataTable(string safeSql)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(safeSql, con);
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds.Tables[0];
            }
        }


        /// <summary>
        /// 执行SQL语句,返回执行SQL语句之后的一张表。
        /// </summary>
        /// <param name="sql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>
        /// <returns></returns>
        public DataTable GetDataTable(string sql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                DataSet ds = new DataSet();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);


                da.Fill(ds);
                return ds.Tables[0];
            }
        }


        /// <summary>
        /// 执行SQL语句,返回执行SQL语句之后的一个数据集,包含多个DataTable。
        /// </summary>
        /// <param name="sql">执行的SQL语句</param>
        /// <returns></returns>
        public DataSet GetDataSet(string sql)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds;
            }
        }


        /// <summary>
        /// 执行SQL语句,返回执行SQL语句之后的一个数据集,包含多个DataTable。
        /// </summary>
        /// <param name="sql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>
        /// <returns></returns>
        public DataSet GetDataSet(string sql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                DataSet ds = new DataSet();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds;


            }
        }



现在有一个问题,我在Windows Mobile里面,也就是用C#创建的智能设备项目,里面没有cmd.Parameters.AddRange(values);这种写法,只有cmd.Parameters.AddWithValue,
但是如果cmd.Parameters.AddWithValue这样写的话我就没办法将这些操作方法写成一个公用的类了,如果直接使用cmd.Parameters.Add()方法的话会有如下错误:
SqlParameterCollection 仅接受非空的 SqlParameter 类型对象,不接受 SqlParamete。

不知道有没有人遇见过呢?请大神帮手看看。 Parameters SqlParameter
[解决办法]

这一句改一下看看




  cmd.Parameters.AddRange(values);

===>

        private void AttachParameters(SqlCommand cmd, SqlParameter[] dbParms)
        {
            if (cmd == null) throw new ArgumentNullException("SqlCommand");
            if (dbParms != null)
            {
                foreach (SqlParameter p in dbParms)
                {
                    if (p != null)
                    {
                        cmd.Parameters.Add(p);
                    }
                }
            }
        }

[解决办法]
 
  
        /// <summary>
        /// 执行SQL语句,返回执行SQL语句之后的一个数据集,包含多个DataTable。
        /// </summary>
        /// <param name="sql">执行的SQL语句,也可以是存储过程名称</param>
        /// <param name="values">存储过程的参数值</param>
        /// <returns></returns>
        public DataSet GetDataSet(string sql, params SqlParameter[] values)
        {
            using (SqlConnection con = Connection)
            {
                SqlCommand cmd = new Sql
Command(sql, con);
                DataSet ds = new DataSet();
                cmd.CommandType = CommandType.StoredProcedure;


                cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds;
            }
        }

热点排行