【问题标题】:SQL SET Statement C# ParametersSQL SET 语句 C# 参数
【发布时间】:2015-02-07 21:44:58
【问题描述】:

我正在使用 SQL 使用 C#,并且在弄清楚如何将 C# 变量传递到 SQL SET 语句时遇到问题。我了解如何将参数传递到 SQL SELECT 语句的“WHERE”部分,但我找不到有关如何将参数添加到 UPDATE 语句的“SET”部分的任何信息。这是我正在变成存储过程的代码:

string sql = " update pay_control set payroll_type_cd = :payroll_type_cd, paystart_dt = :paystart_dt, payend_dt = :payend_dt, check_dt = :check_dt, ";
            sql += "eff_dt = :eff_dt, init_dt = :init_dt, close_dt = :close_dt, active = :active, completed = :completed,  release_pay = :release_pay where pay_control_id = :pay_control_id";

            List<UserInput> listUserInput = new List<UserInput>();

            listUserInput.Add(new UserInput(":payroll_type_cd", "System.Int64", userInputs.PayrollTypeCd.ToString()));
            listUserInput.Add(new UserInput(":pay_control_id", "System.Int64", userInputs.PayControlId.ToString()));
            listUserInput.Add(new UserInput(":paystart_dt", "System.DateTime", userInputs.PaystartDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":payend_dt", "System.DateTime", userInputs.PayendDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":check_dt", "System.DateTime", userInputs.CheckDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":eff_dt", "System.DateTime", userInputs.EffDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":init_dt", "System.DateTime", userInputs.InitDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":close_dt", "System.DateTime", userInputs.CloseDt.ToShortDateString()));
            listUserInput.Add(new UserInput(":active", "System.String", userInputs.Active));
            listUserInput.Add(new UserInput(":completed", "System.String", userInputs.Completed));
            listUserInput.Add(new UserInput(":release_pay", "System.String", userInputs.ReleasePay));

我不打算将“listUserInput”行作为存储过程的一部分,但我不知道如何将信息从“listUserInput”传递到存储过程。 有什么建议? 谢谢

【问题讨论】:

  • UserInput类型是如何定义的?您如何使用该 listUserInput?

标签: c# mysql sql stored-procedures parameters


【解决方案1】:

我建议使用MySqlCommand 和参数化语句,例如:

MySql.Data.MySqlClient.MySqlCommand cmd;
cmd = new MySql.Data.MySqlClient.MySqlCommand();

cmd.CommandText = "UPDATE pay_control SET payroll_type_cd = @payroll_type_cd)";
cmd.Prepare();

cmd.Parameters.AddWithValue("@payroll_type_cd", 1);

【讨论】:

  • 好的,这和我在 where 语句中做的差不多!谢谢!
【解决方案2】:

如果没有理由保留该 UserInput 类,我会直接使用 List&lt;MySqlParameter&gt;

List<MySqlParameter> listParams = new List<MySqlParameter>()
{
   new MySqlParameter { ParameterName = ":payroll_type_cd", 
                        MySqlDbType=MySqlDbType.Int64, 
                        Value= Convert.ToInt64(userInputs.PayrollTypeCd)},
   new MySqlParameter { ParameterName = ":pay_control_id", 
                        MySqlDbType=MySqlDbType.Int64, 
                        Value = Convert.ToInt64(userInputs.PayControlId)},
   new MySqlParameter { ParameterName = ":paystart_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.PaystartDt},
   new MySqlParameter { ParameterName = ":payend_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.PayendDt},
   new MySqlParameter { ParameterName = ":check_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.CheckDt},
   new MySqlParameter { ParameterName = ":eff_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.EffDt},
   new MySqlParameter { ParameterName = ":init_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.InitDt},
   new MySqlParameter { ParameterName = ":close_dt", 
                        MySqlDbType = MySqlDbType.Date,
                        Value = userInputs.CloseDt},
   new MySqlParameter { ParameterName = ":active", 
                        MySqlDbType = MySqlDbType.VarChar,
                        Size = ???? datatable field size here ????
                        Value = userInputs.Active},
   new MySqlParameter { ParameterName = ":completed", 
                        MySqlDbType = MySqlDbType.VarChar,
                        Size = ???? datatable field size here ????
                        Value = userInputs.Completed},
   new MySqlParameter { ParameterName = ":release_pay", 
                        MySqlDbType = MySqlDbType.VarChar,
                        Size = ???? datatable field size here ????
                        Value = userInputs.ReleasePay}

};

现在您可以创建 MySqlCommand 来接收此参数列表

   MySqlCommand cmd = new MySqlCommand("userProcName", connection);
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.AddRange(listParams.ToArray());
   cmd.ExecuteNonQuery();

请注意,使用参数时,您应该仔细设置传递给存储过程的数据类型。因此,一个一个地创建 MySqlParameter 可以精确定义参数的数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2015-02-24
    • 2023-04-03
    相关资源
    最近更新 更多