首页 新闻 会员 周边 捐助

ado.net EF添加了sql函数如何使用

0
悬赏园豆:30 [待解决问题]

我从sql数据库中添加了标量型函数,可是不知道怎么使用,跟映射过来的表使用方法不一样吗?希望能给与指导,能有例子就更好了

蔚蓝色的波涛的主页 蔚蓝色的波涛 | 初学一级 | 园豆:172
提问于:2014-12-05 09:12
< >
分享
所有回答(5)
0
 public static class SQLHelp
    {
        private static readonly string conStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        /// <summary>
        /// 返回执行增加、删除、修改操作后造成影响的行数
        /// </summary>
        /// <param name="sql">要执行的Sql语句</param>
        /// <param name="cmdType">要执行的命令类型</param>
        /// <param name="pms">传入的参数</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] pms)
        {
            using (SqlConnection con = new SqlConnection(conStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    cmd.CommandType = cmdType;
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    con.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }

        /// <summary>
        /// 返回数据库查询结果首行首列的值
        /// </summary>
        /// <param name="sql">要执行的Sql语句</param>
        /// <param name="cmdType">要执行的命令类型</param>
        /// <param name="pms">传入的参数</param>
        /// <returns></returns>
        public static object ExecuteScalar(string sql, CommandType cmdType, params SqlParameter[] pms)
        {
            using (SqlConnection con = new SqlConnection(conStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql, con))
                {
                    cmd.CommandType = cmdType;
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    con.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }

        /// <summary>
        /// 返回SqlDataReader对象
        /// </summary>
        /// <param name="sql">要执行的Sql语句</param>
        /// <param name="cmdType">要执行的命令类型</param>
        /// <param name="pms">传入的参数</param>
        /// <returns></returns>
        public static SqlDataReader ExecuteReader(string sql, CommandType cmdType, params SqlParameter[] pms)
        {
            SqlConnection con = new SqlConnection(conStr);
            using (SqlCommand cmd = new SqlCommand(sql, con))
            {
                cmd.CommandType = cmdType;
                if (pms != null)
                {
                    cmd.Parameters.AddRange(pms);
                }
                try
                {
                    con.Open();
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception)
                {
                    con.Close();
                    con.Dispose();
                    throw;
                }
            }
        }

        /// <summary>
        /// 封装一个返回DataTable对象的方法
        /// </summary>
        /// <param name="sql">要执行的Sql语句</param>
        /// <param name="cmdType">要执行的命令类型</param>
        /// <param name="pms">传入的参数</param>
        /// <returns></returns>
        public static DataTable ExecuteDataTable(string sql, CommandType cmdType, params SqlParameter[] pms)
        {
            DataTable dt = new DataTable();
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conStr))
            {
                adapter.SelectCommand.CommandType = cmdType;
                if (pms != null)
                {
                    adapter.SelectCommand.Parameters.AddRange(pms);
                }
                adapter.Fill(dt);
            }

            return dt;
        }
    }

下面直接调用就可以了啊!

Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-05 09:19
0

不要使用存储过程

吴瑞祥 | 园豆:29449 (高人七级) | 2014-12-05 09:22

这么直白明了!!

支持(0) 反对(0) 蔚蓝色的波涛 | 园豆:172 (初学一级) | 2014-12-05 09:24

@蔚蓝色的波涛: 这个是经验之谈。存储过程会遇到各种各样的问题。

以我个人的认识。使用存储过程实际上只是为了偷懒。。

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-12-05 09:25

@吴瑞祥: 网上查了,是蛮多问题的。但我这次就想任性地偷个懒,为啥不能把这个函数映射过来直接使用?

支持(0) 反对(0) 蔚蓝色的波涛 | 园豆:172 (初学一级) | 2014-12-05 09:30

@蔚蓝色的波涛: 也是十分的任性,映射过来的需要使用 从数据库更新实体,然后把存储过程也选中

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-12-05 09:35

@吴瑞祥: 确实是个人的经验之谈。有许多场景是适合用存储过程的,非得不用成本很高,

当然,修改设计是另外一种方法。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-05 09:38

@爱编程的大叔: 嗯的。就是这个意思。相对于使用存储过程,我还是比较愿意去重新设计。。。

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-12-05 09:54
0

标量函数用法很简单啊,

 Int myReturnValue=DataContext.myFunction(Param1, Param2);

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-05 09:39

你这个是linqtosql的用法吧

支持(0) 反对(0) 蔚蓝色的波涛 | 园豆:172 (初学一级) | 2014-12-05 09:51

@蔚蓝色的波涛: 

如果你是使用微软的标准生成器,需要配合一点操作或者添加如下函数

Entity Framework 调用返回标量值的存储过程

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2014-12-05 09:58
0

DbContext.Database.SqlQuery,这个很强大...

幻天芒 | 园豆:37205 (高人七级) | 2014-12-05 09:43
0

Esql

Halower | 园豆:1723 (小虾三级) | 2014-12-05 22:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册