在c#中使用SQL连接进行批处理操作的正确方法

时间:2014-08-25 22:40:34

标签: c# sql sql-server stored-procedures sqlconnection

好的,我的功能是为了这个目的,我不确定这是否是完美的方式

我认为srStored_Procedure_Name是自我解释的

List<string> lst_StoredProcedure_Variable_Names提供存储过程变量名称

List<List<object>> lst_Operation_Parameters提供将要添加的参数,每个列表具有与存储过程变量名称计数相同数量的对象

通过以下方式,我将使用与服务器相同的连接,在整个插入操作期间将打开不超过1个连接

非常感谢答案

还有一个问题我必须在try catch块中包装这一行吗?会有任何错误导致应用程序崩溃吗?

 using (SqlConnection connection = new SqlConnection(DbConnection.srConnectionString))

C#WPF .net 4.5 SQL server 2014

public static bool batch_execute_SQL_stored_Procedure(string srStored_Procedure_Name, List<string> lst_StoredProcedure_Variable_Names,
    List<List<object>> lst_Operation_Parameters)
{
    bool blErrorHappened = false;

    try
    {
        using (SqlConnection connection = new SqlConnection(DbConnection.srConnectionString))
        {

        connection.Open();

            for (int i = 0; i < lst_Operation_Parameters.Count; i++)
            {
                using (SqlCommand cmd = new SqlCommand(srStored_Procedure_Name, connection))
                {
                    cmd.CommandTimeout = PublicSettings.irCommandTimeOutSettings_Second;
                    cmd.CommandType = CommandType.StoredProcedure;

                    for (int k = 0; k < lst_Operation_Parameters[i].Count; k++)
                    {
                        cmd.Parameters.AddWithValue(lst_StoredProcedure_Variable_Names[k], lst_Operation_Parameters[i][k]);
                    }

                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception E)
                    {
                        blErrorHappened = true;
                        //log error here
                    }
                }
            }
        }
    }
    catch (Exception E)
    {
        blErrorHappened = true;
        //log error here
    }
    return blErrorHappened;
}

0 个答案:

没有答案