每个存储过程或通用函数的单独函数可以调用任何过程吗?

时间:2014-02-27 20:51:25

标签: c# sql-server stored-procedures

在我们项目的当前状态中,我们至少有一个方法用于调用我们在数据库服务器上创建的每个存储过程。由于这些方法非常冗长,涉及创建每个SqlParameter然后将它们传递给数据库连接,我正在考虑创建一个方法来根据我们的需要推广流程。

这是我到目前为止所提出的:

public static void UpdateTableTest(string procedureName, params object[] paramList)
    {
        if (sessionID == -1)
            GetActiveSession();

        SqlConnection scn = new SqlConnection(GetConnectionString());

        try
        {
            scn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = scn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = procedureName;
            SqlCommandBuilder.DeriveParameters(cmd);
            for (int i = 0; i < paramList.Length; i++)
            {
                cmd.Parameters[i+1].Value = paramList[i];
            }

            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            scn.Close();
        }
    }

除了我将针对不同的查询类型运行的问题,以及我需要从中返回一些数据的查询类型,这种执行存储过程的方法有什么本质上的错误吗?我应该为每个存储过程坚持使用单独的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以考虑使用企业库或

SQLHelpers

可在线获取。

示例

DataSet dsUserInfo = new DataSet();    
dsUserInfo = SqlHelper.ExecuteDataSet("Select * from UserInfo", CommandType.Text);    
MyDataGridview.DataSource = dsUserInfo.Tables[0];

或者,如果你想要摆脱这种情况,你可以像约翰提出的EF那样去寻找ORM