2014-10-09 88 views
0

我正在研究Windows窗體應用程序,我創建了一個包含房間名稱,大小和LAB的房間窗體。如何在C#中的SQL Server數據庫中保存CheckBox值

在數據庫中的表中包含的列RoomNamevarchar),Sizeint),和LABbit)。

這是ADD_ROOM存儲過程:

CREATE PROCEDURE [dbo].[ADD_ROOM] 
    @NAME_ROOM VARCHAR(50), 
    @SIZE INT, 
    @LAB BIT 
AS 
    INSERT INTO [dbo].[ROOM] ([NAME_ROOM], [SIZE], [LAB]) 
    VALUES (@NAME_ROOM, @SIZE, @LAB) 

這裏是ADD_ROOM.cs

class CLS_ADD_ROOM 
{ 
     public void ADD_ROOM(string NAME_ROOM,int SIZE,Boolean LAB) 
     { 
      DAL.DataAccessLayer DAL = new DAL.DataAccessLayer(); 
      DAL.Open(); 
      SqlParameter[] param = new SqlParameter[3]; 

      param[0] = new SqlParameter("@NAME_ROOM", SqlDbType.VarChar, 50); 
      param[0].Value = NAME_ROOM; 

      param[1] = new SqlParameter("@SIZE", SqlDbType.Int); 
      param[1].Value = SIZE; 

      param[2] = new SqlParameter("@LAB", SqlDbType.Bit); 
      param[2].Value = LAB; 

      DAL.ExecuteCommand("ADD_ROOM", param); 
      DAL.Close(); 
     } 

     public void UPDATE_ROOM(string ID_ROOM, string NAME_ROOM, int SIZE, bool LAB) 
     { 
      DAL.DataAccessLayer DAL = new DAL.DataAccessLayer(); 
      DAL.Open(); 

      SqlParameter[] param = new SqlParameter[4]; 
      param[0] = new SqlParameter("@ID_ROOM", SqlDbType.Int); 
      param[0].Value = ID_ROOM; 

      param[1] = new SqlParameter("@NAME_ROOM", SqlDbType.VarChar, 50); 
      param[1].Value = NAME_ROOM; 

      param[2] = new SqlParameter("@SIZE", SqlDbType.Int); 
      param[2].Value = SIZE; 

      param[3] = new SqlParameter("@LAB", SqlDbType.Bit); 
      param[3].Value = LAB; 

      DAL.ExecuteCommand("UPDATE_ROOM", param); 
      DAL.Close(); 
     } 

而在ADD ROOM FORM

private void button1_Click(object sender, EventArgs e) 
{ 
    ROOM.ADD_ROOM(TXT_ROOM_NAME.Text, Convert.ToInt32(TXT_ROOM_SIZE.Text), Convert.ToBoolean(CHECK_LAB.CheckState)); 

    MessageBox.Show(" The Room has been added successfully", "ADD PROCEDURE", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    this.dataGridView1.DataSource = ROOM_VIEW.GET_ALL_ROOMS(); 
} 

後面按鈕ADD Room代碼和錯誤是

輸入字符串的不正確的格式

+1

你能添加所有異常的堆棧跟蹤嗎? – Fabio 2014-10-09 09:03:55

+0

http://im84.gulfup.com/wFq8fH.jpg – 2014-10-09 09:14:09

+0

http://im84.gulfup.com/wFq8fH.jpg @Fabio – 2014-10-09 09:21:36

回答

2

在你的C#代碼,則應更換Convert.ToBoolean(CHECK_LAB.CheckState)CHECK_LAB.Checked - 這是與定義布爾複選框是否被選中:

private void button1_Click(object sender, EventArgs e) 
{ 
    ROOM.ADD_ROOM(TXT_ROOM_NAME.Text, 
        Convert.ToInt32(TXT_ROOM_SIZE.Text), 
        CHECK_LAB.Checked); 

    MessageBox.Show(" The Room has been added successfully", "ADD PROCEDURE", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    this.dataGridView1.DataSource = ROOM_VIEW.GET_ALL_ROOMS(); 
} 

CheckState屬性布爾屬性 - 它是一個三個可能的值:

  • CheckState.Checked
  • CheckState.Unchecked
  • CheckState.Indeterminate
+0

謝謝馬克,但仍然沒有工作:(@marc_s – 2014-10-09 09:25:48

1

不知道,但是這可能是值得一試。在ADD_ROOM.cls:布爾的

param[2] = new SqlParameter("@LAB", SqlDbType.Bit); 
param[2].Value = LAB ? 1 : 0; // <---- CHANGE THIS LINE 

值作爲參數可被轉換成0或1以外的內容,這是由SQL服務器的預期。

+0

我使用sql mangment studio填充「房間」表並嘗試更新功能,它的工作......問題是如何保存初始值..這裏是「更新按鈕」後面的代碼private void button4_Click(object sender,EventArgs e) ROOM.UPDATE_ROOM(TXT_ROOM_ID.Text,TXT_ROOM_NAME.Text,Convert.ToInt32(TXT_ROOM_SIZE.Text),CHECK_LAB.Checked) ; } @JoriO – 2014-10-09 09:16:08

+0

你給我們的代碼中沒有'UPDATE_ROOM'方法。 @Anas Al-shami – JoriO 2014-10-09 09:22:37

+0

Yeap..it也在ADD_ROOM.cls中:public void UPDATE_ROOM(string ID_ROOM,string NAME_ROOM,int SIZE,bool LAB){DAL.DataAccessLayer DAL = new DAL.DataAccessLayer(); DAL.Open(); SqlParameter [] param = new SqlParameter [4]; param [0] =新的SqlParameter(「@ ID_ROOM」,SqlDbType.Int); param [0] .Value = ID_ROOM; param [0] =新的SqlParameter(「@ NAME_ROOM」,SqlDbType.VarChar,50); param [0] .Value = NAME_ROOM; param [1] =新的SqlParameter(「@ SIZE」,SqlDbType.Int); param [1] .Value = SIZE; param [2] =新的SqlParameter(「@ LAB」,SqlDbType.Bit); param [2] .Value = LAB; DAL.ExecuteCommand(「UPDATE_ROOM」,param); DAL.Close();} – 2014-10-09 09:33:15

0

謝謝你這麼多傢伙..問題就解決了:)

我改變了ADD_ROOM.cls指令:

class CLS_ADD_ROOM 
    { 
     public void ADD_ROOM(string NAME_ROOM,int SIZE,int LAB)// <=== Change bool to int 
    { 
      DAL.DataAccessLayer DAL = new DAL.DataAccessLayer(); 
      DAL.Open(); 
      SqlParameter[] param = new SqlParameter[3]; 

      param[0] = new SqlParameter("@NAME_ROOM", SqlDbType.VarChar, 50); 
      param[0].Value = NAME_ROOM; 

      param[1] = new SqlParameter("@SIZE", SqlDbType.Int); 
      param[1].Value = SIZE; 

      param[2] = new SqlParameter("@LAB", SqlDbType.Bit); //<=== keep it .bit 
      param[2].Value = LAB ; 


      DAL.ExecuteCommand("ADD_ROOM", param); 
      DAL.Close(); 
      } 

而在ADD_ROOM表格中添加此條件:

private void button1_Click(object sender, EventArgs e) 
     {    

if (CHECK_LAB.Checked) 
{ 

ROOM.ADD_ROOM(TXT_ROOM_NAME.Text,int.Parse(TXT_ROOM_SIZE.Text),Convert.ToInt32(1)); 

} 
    else 
{ 

    ROOM.ADD_ROOM(TXT_ROOM_NAME.Text, Convert.ToInt32(TXT_ROOM_SIZE.Text), Convert.ToInt32(0));    } 
相關問題