SQL: обновление не влияет ни на одну строку - PullRequest
0 голосов
/ 29 июля 2011

Я хочу обновить набор данных в таблице DB2 / AS400.

Проблема в том, что если в списке параметров есть строковый параметр, команда не найдет строку для обновления.

Например: если я запускаю команду только с номером компании, команда будет выполнена успешно.Если я запускаю команду с номером компании и номером объекта, команда не выполняется.

У кого-нибудь есть идеи?

IDbConnection cn = Tools.GetCnApp();

try
{
    StringBuilder sql = new StringBuilder(); 

    sql.AppendLine("UPDATE " + Tools.GetSchemeApp() + "/ChangeReasonAssignments");
    sql.AppendLine("  SET Confirmed = @CONF, Confirmed_By = @CONFBY, Confirmed_At = @CONFAT");
    sql.AppendLine("  WHERE Company = @CONO AND Facility = @FACI AND Department = @DEPT");
    sql.AppendLine("  AND Production_Group = @PRGR AND Manufacturing_Order = @ORDR AND Order_Operation = @OPER");
    sql.AppendLine("  AND Confirmed = 0");

    IDbCommand cmd = cn.CreateCommand();

    cmd.SetParameter("@CONO", this.CompanyNumber);
    cmd.SetParameter("@FACI", this.FacilityNumber);
    cmd.SetParameter("@DEPT", this.ProductionGroup.Department.Name);
    cmd.SetParameter("@PRGR", this.ProductionGroup.Name);
    cmd.SetParameter("@ORDR", this.ManufacturingNumber);
    cmd.SetParameter("@OPER", this.OperationNumber);
    cmd.SetParameter("@CONFBY", Base.User);
    cmd.SetParameter("@CONFAT", DateTime.Now.ToString());
    cmd.SetParameter("@CONF", 1);

    cmd.CommandText = sql.ToString();

    if (cmd.ExecuteNonQuery() > 0)
    {
    }

РЕДАКТИРОВАТЬ

Типы данных в база данных :

  • Компания: INTEGER
  • Объект: VARCHAR
  • Отдел: VARCHAR
  • Группа производства: VARCHAR
  • Manufacturing_Order: INTEGER
  • Order_Operation: INTEGER

Типы данных в .NET :

  • CompanyNumber: int
  • FacilityNumber: String
  • Название отдела: String
  • ProductionGroup: String
  • Manufactororder: int
  • OrderOperation: int

sql.ToString () результаты:

UPDATE TSAEDBDEV/ChangeReasonAssignments SET Confirmed = @CONF, Confirmed_By = @CONFBY, Confirmed_At = @CONFAT WHERE Company = @CONO AND Facility = @FACI AND Confirmed = 0

1 Ответ

0 голосов
/ 29 июля 2011

Попробуйте установить строковые значения в ': cmd.SetParameter("@DEPT", "'" + this.ProductionGroup.Department.Name + "'");

...