C#中往数据库插入空值报错解决方法

C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value

 

class SqlHerper
    {
        private static readonly string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        //封装执行增删改 只有执行insert updata delete 语句的时候返回受影响的行数,select 永远返回的是-1
        public static int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] parameters)
        {
            using(SqlConnection conn =new SqlConnection(connStr))
            {
                using (SqlCommand com = new SqlCommand(sql, conn))
                {
                    com.CommandType = cmdType;
                    if (parameters != null)
                    {
                        foreach (SqlParameter spr in parameters)
                        {
                            if (spr.SqlValue == null)
                            {
                                spr.SqlValue = DBNull.Value;  //C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value
                            }
                            com.Parameters.Add(spr);
                        }
                        //com.Parameters.AddRange(parameters);
                    }
                    conn.Open();
                    return com.ExecuteNonQuery();
                }
            }
        }
        //封装返回单个值的方法 只返回第一行第一列
        public static object ExecuteScalar(string sql, CommandType cmdType, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand com = new SqlCommand(sql, conn))
                {
                    com.CommandType = cmdType;
                    if (parameters != null)
                    {
                        com.Parameters.AddRange(parameters);
                    }
                    conn.Open();
                    return com.ExecuteScalar();
                }
            }
        }
        //返回SqlDataReader对象的方法
        public static SqlDataReader ExecuteReader(string sql, CommandType cmdType, params SqlParameter[] parameters)
        {
            SqlConnection conn = new SqlConnection(connStr); //Connection 不能using 因为返回SqlDataReader对象时要保证conn连接时打开状态的。
            using (SqlCommand com = new SqlCommand(sql, conn))
            {
                com.CommandType = cmdType;
                if (parameters != null)
                {
                    com.Parameters.AddRange(parameters);
                }
                try
                {
                    conn.Open();
                    //CommandBehavior.CloseConnection 当关闭DataReader对象时,也自动关闭关联的Connection对象。
                    return com.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception)
                {
                    conn.Dispose();
                    throw;
                }
            }
        }
        //返回DataTable对象的方法
        public static DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] parameters)
        {
            DataTable dt = new DataTable();
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql, connStr))
            {
                adapter.SelectCommand.CommandType = cmdType;
                if (parameters != null)
                {
                    adapter.SelectCommand.Parameters.AddRange(parameters);
                }
                adapter.Fill(dt);
            }
            return dt;
        }
    }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。