SQL データベースにある Equipment テーブルに新しい項目を追加しようとしています。3 層アーキテクチャを使用しています。この特定の add メソッドでは、表示メンバーが設定され、値メンバーがそれぞれのフィールドの ID に設定された 2 つのコンボボックスを使用します。
新しい機器の追加ボタンを押すと、「入力文字列が正しい形式ではありませんでした」というエラーが表示されます (すべてのアイテムがテキストボックスに入力され、コンボボックスからの値が選択された後)。どこにあるのかわかりませんそれはコンボボックスから来ているというのが私の考えです。
私の機器テーブルには6行が含まれています。
1.EquipmentNo int autonumber 2.EquipmentDesc nvarchar 3.SerialNo nvarchar 4.Barcode nvarchar 5.CategoryID nvarchar (Category テーブルの fk) 5.VenueID int (Venue テーブルの fk)
Venue テーブルには VenueID (autonumber) と RoomNumber(string) があります。私の Category テーブルには CategoryID (Hard for Hardware と Soft for Software) と Desription (Hardware and Software) があります。
私のビジネスレイヤーには、次のコードが含まれています。
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";
表示されたテキストではなく、2 つのコンボボックスの ID を返したいです。
助けてくれてありがとう