企业库重写代码以保存数据和返回值

时间:2010-05-14 15:31:36

标签: c# enterprise-library

没有企业数据库,我使用下面的代码向DB插入一些东西并从中读取返回值

int result = 0;
using (SqlConnection myConnection = 
    new SqlConnection(AppConfiguration.ConnectionString))
{
     SqlCommand myCommand = new SqlCommand("SaveUser", myConnection);
     myCommand.CommandType = CommandType.StoredProcedure;
     myCommand.Parameters.AddWithValue("@location", objUser.Location);

     DbParameter returnValue;
     returnValue = myCommand.CreateParameter();
     returnValue.Direction = ParameterDirection.ReturnValue;
     myCommand.Parameters.Add(returnValue);

     myConnection.Open();
     myCommand.ExecuteNonQuery();
     result = Convert.ToInt32(returnValue.Value);
     myConnection.Close();
}

我如何在企业数据库中执行相同的操作?我想从被调用的存储过程中返回值。

3 个答案:

答案 0 :(得分:1)

您可以尝试以类似的方式执行此操作。应该在配置文件中定义“YourDb”。

int result = 0;

Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("YourDb");
DbCommand myCommand = db.GetStoredProcCommand("SaveUser");
db.AddInParameter(myCommand, "location", DbType.String, objUser.Location);
db.ExecuteNonQuery(myCommand);
result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue"));

答案 1 :(得分:0)

您可以使用ExecuteNonQuery的重载缩短它:

Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("YourDb");
db.ExecuteNonQuery("SaveUser", objUser.Location);
int result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue"));

其中 SaveUser 是proc名称, objUser.Location 是输入参数

答案 2 :(得分:0)

在执行查询之前,必须将return参数添加到命令对象。

db.AddParameter(myCommand, "returnvalue", DbType.String, ParameterDirection.ReturnValue, null, DataRowVersion.Default, null);

--Execute the query here using ExecuteNonQuery

result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue"));