Я пытаюсь добавить новый элемент в свою таблицу оборудования, расположенную в моей базе данных SQL. Я использую трехуровневую архитектуру. Этот конкретный метод добавления использует два поля со списком, в которых установлены элементы отображения, а в элементах значений установлены идентификаторы соответствующих полей.
Я получаю сообщение об ошибке: «Входная строка была в неправильном формате», когда я нажимаю кнопку добавления нового оборудования (после того, как все элементы были введены в текстовые поля и выбраны значения из полей со списком. и я не уверен, где это исходит, я думаю, что это исходит из выпадающих списков.
моя таблица оборудования содержит 6 строк.
1.EquipmentNo int autonumber 2.EquipmentDesc nvarchar 3.SerialNo nvarchar 4.Barcode nvarchar 5.CategoryID nvarchar (fk моей таблицы категорий) 5.VenueID int (fk моей таблицы Venue)
моя таблица Venue имеет VenueID (автономный номер) и 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();
мои поля со списком заполнены методом загрузки страницы:
//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
вы иметь дело с. - person Arran   schedule 30.08.2013