我正在我的存储库类中重写内联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); }
希望这可以帮助 :)
在我们的内部应用程序中,我们通常使用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); }
希望这可以帮助 :)
获取企业库的副本.它是围绕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