当前位置:  开发笔记 > 编程语言 > 正文

使用存储过程最优雅的方法是什么?

如何解决《使用存储过程最优雅的方法是什么?》经验,为你挑选了2个好方法。

我正在我的存储库类中重写内联SQL以改为使用存储过程(安全性要求).在过去使用Fluent NHibernate和Linq2Sql后,我发现它非常笨重且不优雅.

编辑:澄清一下,我不是在寻找适用于存储过程的ORM解决方案.我只是想要一个很好的方法来编写下面的代码.

是否有任何策略可以使这种代码尽可能优雅?

        string commandText = "dbo.Save";

        using (SqlConnection sql = new SqlConnection(_connString.ConnectionString))
        using (SqlCommand cmd = sql.CreateCommand())
        {
            cmd.CommandText = commandText;
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter idParam = new SqlParameter("identity", item.Identity);
            idParam.Direction = ParameterDirection.Input;

            SqlParameter nameParam = new SqlParameter("name", item.Name);
            nameParam.Direction = ParameterDirection.Input;

            SqlParameter descParam = new SqlParameter("desc", item.Description);
            descParam.Direction = ParameterDirection.Input;

            SqlParameter titleParam = new SqlParameter("title", item.)
            descParam.Direction = ParameterDirection.Input;

            //SNIP More parameters

            cmd.Parameters.Add(idParam);
            cmd.Parameters.Add(descParam);
            cmd.Parameters.Add(titleParam);
            //SNIP etc

            sql.Open();

            cmd.ExecuteNonQuery();

            //Get out parameters
        }

        return item;

Dave.. 10

在我们的内部应用程序中,我们通常使用SqlHelper类,可以在以下链接(下载和描述)中找到:http://www.microsoft.com/downloads/details.aspx? familyid = f63d1f0a-9877-4a7b-88ec- 0426b48df275&displaylang = EN

本质上,SqlHelper类消除了声明连接对象,命令等的一些需要,并允许您调用方法来返回DataSet等对象

然后您可以使用SqlHelper:

public static int UpdateItem(int parameter1, int parameter2, string parameter3)
    {
        SqlParameter[] arParam = new SqlParameter[3];
        arParam[0] = new SqlParameter("@Parameter1", lotId);
        arParam[1] = new SqlParameter("@Parameter2", saleId);
        arParam[2] = new SqlParameter("@Parameter3", lotNumber);


        return int.Parse(SqlHelper.ExecuteScalar(connString, CommandType.StoredProcedure, "spName", arParam).ToString(), CultureInfo.InvariantCulture);
    }

希望这可以帮助 :)



1> Dave..:

在我们的内部应用程序中,我们通常使用SqlHelper类,可以在以下链接(下载和描述)中找到:http://www.microsoft.com/downloads/details.aspx? familyid = f63d1f0a-9877-4a7b-88ec- 0426b48df275&displaylang = EN

本质上,SqlHelper类消除了声明连接对象,命令等的一些需要,并允许您调用方法来返回DataSet等对象

然后您可以使用SqlHelper:

public static int UpdateItem(int parameter1, int parameter2, string parameter3)
    {
        SqlParameter[] arParam = new SqlParameter[3];
        arParam[0] = new SqlParameter("@Parameter1", lotId);
        arParam[1] = new SqlParameter("@Parameter2", saleId);
        arParam[2] = new SqlParameter("@Parameter3", lotNumber);


        return int.Parse(SqlHelper.ExecuteScalar(connString, CommandType.StoredProcedure, "spName", arParam).ToString(), CultureInfo.InvariantCulture);
    }

希望这可以帮助 :)



2> NotMe..:

获取企业库的副本.它是围绕ADO的一个很好的包装器.例如:

using System.Data.Common;
using System.Globalization;
using Microsoft.Practices.EnterpriseLibrary.Data;

Database db = DatabaseFactory.CreateDatabase(DatabaseType.MyDatabase.ToString());

using (DbCommand dbCommand = db.GetStoredProcCommand("dbo.MyStoredProc")) {
    db.AddInParameter(dbCommand, "identity", DbType.Int32, item.Identity);
    db.AddInParameter(dbCommand, "name", DbType.String, item.Name);
    db.AddInParameter(dbCommand, "desc", DbType.String, item.Description);
    db.AddInParameter(dbCommand, "title", DbType.String, item.Title);

    db.ExecuteNonQuery(dbCommand);
} // using dbCommand

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有