Я пытаюсь добавить новый элемент в свою таблицу оборудования, расположенную в моей базе данных SQL. Я использую 3 уровня архитектуры. В этом конкретном методе добавления используются два comboboxes с установленными элементами отображения, а их учетные записи устанавливаются в ID соответствующих полей.Ошибка добавления нового элемента в таблицу sql
Я получаю сообщение об ошибке: «Строка ввода не была в правильном формате», когда я нажимаю кнопку добавления нового оборудования (после того, как все элементы были введены в текстовые поля и выбраны значения из выпадающих списков и i я не уверен, где он пришедший из, моя идея состоит в том, что она исходит от Наримера.
моего стола оборудования содержит 6 строк.
1.EquipmentNo INT AutoNumber 2.EquipmentDesc NVARCHAR 3.SerialNo NVARCHAR 4.Barcode nvarchar 5.CategoryID nvarchar (fk моей таблицы категорий) 5.VenueID Int (Ф.К. моей Venue таблицы)
мое Места таблица имеет VenueID (Autonumber) и RoomNumber (строку) моя Категория таблицы имеет CategoryID (Hard для оборудования и Soft для программного обеспечения) и Desription (Аппаратные средства и программное обеспечение)
Мой бизнес слой содержит следующий код:
public int AddEquipment(Equipment eq)
{
if (dbConn.State == ConnectionState.Closed)
{
dbConn.Open();
}
string sqlInsert = "sp_AddNewEquipment '" + eq.EquipmentDescription + "' , '" + eq.SerialNo + "' , '" + eq.Barcode + "' , '" + eq.CategoryID + "' , '" + eq.VenueID + "'";
dbCmd = new SqlCommand(sqlInsert, dbConn);
int x = dbCmd.ExecuteNonQuery();
return x;
}
моя хранимая процедура выглядит следующим образом:
ALTER PROCEDURE [dbo].[sp_AddnewEquipment]
-- Add the parameters for the stored procedure here
@EquipmentNo bigint,
@EquipmentDescription nvarchar(50),
@SerialNo nvarchar(50),
@Barcode bigint,
@CategoryID nvarchar(50),
@VenueID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO Equipment(EquipmentNo, EquipmentDescription, Barcode, SerialNo, CategoryID, VenueID)
VALUES(@EquipmentNo, @EquipmentDescription, @Barcode, @SerialNo, @CategoryID, @VenueID)
END
И вот мой код для моего вида, присутствующего в методе btnAdd_Click:
Equipment eq = new Equipment(txtDescription.Text, txtSerialNo.Text, txtBarcode.Text, cmbCategory.ValueMember.ToString(), Convert.ToInt32(cmbVenues.ValueMember));
eq.AddNewEquipment();
мои ComboBoxes заполняются метод загрузки страницы:
//loading of category combobox
cmbCategory.DataSource = c.GetAllCategories();
cmbCategory.DisplayMember = "Description";
cmbCategory.ValueMember = "Category ID";
//Loading of venue combobox
cmbVenues.DataSource = v.GetAllVenues();
cmbVenues.DisplayMember = "Room Number";
cmbVenues.ValueMember = "VenueID";
я хочу вернуть корочки два Наримера не отображаемый текст.
Благодарим Вас за помощь
Ну две вещи: запустить тот же запрос в базу данных вручную, используя одни и те же значения, и убедитесь, что он работает, и во-вторых, : 'Convert.ToInt32 (cmbVenues.ValueMember)) ... Я бы изменил это на' int.TryParse' ..., чтобы убедиться, что это фактически 'int', с которым вы имеете дело. – Arran