Rob*_*ett 8 c# sql stored-procedures
我正在我的存储库类中重写内联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;
Run Code Online (Sandbox Code Playgroud)
Dav*_*ave 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);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
获取企业库的副本.它是围绕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
Run Code Online (Sandbox Code Playgroud)