У меня вопрос, пытаюсь сделать вставку в локальную базу, в таблицу со столбцом с типом datetime.
cmd.Connection = conn.conectar();
cmd.CommandText = "insert into tab_item " +
"values (@codVendedor, @codCleinte, @datavenda, @valorTotalVenda, @formapgmt)";
cmd.Parameters.AddWithValue("@codVendedor", codVendedor);
cmd.Parameters.AddWithValue("@codCleinte", codCliente);
cmd.Parameters.AddWithValue("@datavenda", Convert.ToDateTime(DateTime.Now));
cmd.Parameters.AddWithValue("@valorTotalVenda", valortotalvenda);
cmd.Parameters.AddWithValue("@formapgmt", formadepagamento);
cmd.ExecuteNonQuery();
mensagemretorno = "Sucesso para gerar venda";
Это структура таблицы в SQL:
create table tab_venda(
id int primary key not null identity(1, 1),
cod_vendedor int not null foreign key (id) references tab_pessoa,
cod_cliente int not null foreign key (id) references tab_pessoa,
dta_venda datetime not null,
valor_total_venda decimal (18, 2) not null,
forma_pagamento int not null
)
Ошибка, которую я получаю, это
System.Data.SqlClient.SqlException: Неявное приведение типа данных datetime к типу int не допускается. Используйте функцию CONVERT для выполнения этого запроса.
Кто-нибудь может мне помочь? Я не знаю, как продолжить эту вставку
Я попытался использовать dateTime.Now, потому что мне нужна точная дата для завершения продажи, но это все равно не сработало, я попытался принудительно преобразовать это значение (Convert.ToDateTime(DateTime.Now)) в дату и время, но безуспешно.
Вы должны перечислить столбцы таблицы во вставке, чтобы убедиться, что значения совпадают. insert into tab_item(column1, ... , lastColumn) values(@column1Value, ... , @lastColumnValue)
^ Это. В настоящее время вы используете параметр @datavenda для вставки значений DateTime в столбец cod_cliente с типом int.
В качестве примечания: не используйте AddWithValue().





Вам нужно указать столбцы, иначе он попытается вставить, начиная с первого столбца, который в вашем случае является столбцом автоидентификации id:
cmd.CommandText = "insert into tab_item " +
"(cod_vendedor, cod_cliente, dta_venda, valor_total_venda, forma_pagamento) " +
"values (@codVendedor, @codCleinte, @datavenda, @valorTotalVenda, @formapgmt)";
Кроме того, нет необходимости использовать Convert.ToDateTime на DateTime.Now — это уже DateTime:
cmd.Parameters.AddWithValue("@datavenda", DateTime.Now);
но я вижу из вашего вопроса, что вы добавили его, думая, что это проблема, поэтому вы можете безопасно удалить его.
Ваше вступительное заявление не соответствует действительности. Если в таблице есть столбец IDENTITY, он опускается, если вы не определяете свои столбцы в предложении INSERT (если только INSERT_IDENTITY не включен для таблицы в текущем соединении). Конечно, это не меняет того факта, что пропускать столбцы — плохая привычка. дб<>рабочий пример
Однако, если бы INSERT_IDENTITY был включен, OP не получила бы сообщение об ошибке: db<>fiddle
Convert.ToDateTime(DateTime.Now)не имеет никакого смысла.DateTime.Nowуже является DateTime.