Не удается правильно задать типы полей в параметрах команды вставки.

Тема в разделе ".NET", создана пользователем vitvikt, 30 апр 2011.

  1. vitvikt

    vitvikt Гость

    Пытаюсь реализовать пример обновления данных на сервере, приведенный в книге Сеппа “Программирование ADO.net 2.0”
    Однако использую не MSSql, а MySql 5.0.11

    Не удается правильно задать типы полей в параметрах команды вставки.
    При попытке обновления, выдается сообщение
    “Column 'CustomerID' cannot be null”.
    Если вместо параметров в команде задать конкретные значения, обновление срабатывает.
    Отсюда делаю вывод, что виновата строчка
    OrdersAdapter.InsertCommand.Parameters.Add("?CustomerID", MySqlDbType.String, 15, "`Orders`.`CustomerID`");
    В базе тип CustomerID – int(15).
    Перепробовал разные варианты MySqlDbTyp.
    Не помогает.

    В чем может быть дело?
    Ниже функция целиком:


    static void CreateHierarchicalUpdatingLogic(MySqlDataAdapter OrdersAdapter, MySqlDataAdapter DetailsAdapter)
    {
    MySqlCommandBuilder cbOrders = new MySqlCommandBuilder(OrdersAdapter);
    MySqlCommandBuilder cbDetails = new MySqlCommandBuilder(DetailsAdapter);
    string strSQL;
    strSQL = "INSERT INTO `CIT55`.`Orders` (CustomerID, OrderDate) " +
    " VALUES (?CustomerID, ?OrderDate);" + // срабатывает " VALUES ('abcd', '1800-01-01');" +
    "SELECT ?OrderID = LAST_INSERT_ID()"; //всмсто "SELECT ?OrderID = SCOPE_IDENTITY()";

    OrdersAdapter.InsertCommand = new MySqlCommand(strSQL, OrdersAdapter.SelectCommand.Connection);

    // В варианте MSSql у Сеппы это выглядит так
    /*
    OrdersAdapter.InsertCommand = new SqlCommand(strSQL, OrdersAdapter.SelectCommand.Connection);
    OrdersAdapter.InsertCommand.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
    OrdersAdapter.InsertCommand.Parameters.Add("@OrderDate", SqlDbType.DateTime, 0, "OrderDate");
    OrdersAdapter.InsertCommand.Parameters.Add("@OrderID", SqlDbType.Int, 0, "OrderID").Direction = ParameterDirection.Output;
    OrdersAdapter.InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;
    */
    //Я заменяю тип на MySqlDbType.String. Не помогают и другие варианты
    OrdersAdapter.InsertCommand.Parameters.Add("?CustomerID", MySqlDbType.String, 15, "`Orders`.`CustomerID`");
    OrdersAdapter.InsertCommand.Parameters.Add("?OrderDate", MySqlDbType.Datetime, 0, "`Orders`.`OrderDate`");
    OrdersAdapter.InsertCommand.Parameters.Add("?OrderID", MySqlDbType.String, 20, "`Orders`.`OrderID`").Direction = ParameterDirection.Output;
    OrdersAdapter.InsertCommand.UpdatedRowSource = UpdateRowSource.OutputParameters;

    OrdersAdapter.UpdateCommand = cbOrders.GetUpdateCommand();
    OrdersAdapter.DeleteCommand = cbOrders.GetDeleteCommand();

    DetailsAdapter.InsertCommand = cbDetails.GetInsertCommand();
    DetailsAdapter.UpdateCommand = cbDetails.GetUpdateCommand();
    DetailsAdapter.DeleteCommand = cbDetails.GetDeleteCommand();
    }
     
  2. TaTTDoGG

    TaTTDoGG Гость

    а что если попробовать так:
    Код (Text):
    OrdersAdapter.InsertCommand.Parameters.AddWithValue("?p1",param);
    а потом в запросе использовать ?p1

    тип переменной param определится сам.
     
Загрузка...

Поделиться этой страницей