C# 如何在C语言中保存SQL Server数据库中的复选框值#

C# 如何在C语言中保存SQL Server数据库中的复选框值#,c#,sql-server,checkbox,C#,Sql Server,Checkbox,我正在开发一个Windows窗体应用程序,我创建了一个包含房间名称、大小和实验室的房间窗体 数据库中的表包含列RoomName(varchar)、Size(int)和LAB(bit) 这是ADD\u ROOM存储过程: CREATE PROCEDURE [dbo].[ADD_ROOM] @NAME_ROOM VARCHAR(50), @SIZE INT, @LAB BIT AS INSERT INTO [dbo].[ROOM] ([NAME_ROOM], [SIZ

我正在开发一个Windows窗体应用程序,我创建了一个包含房间名称、大小和实验室的房间窗体

数据库中的表包含列
RoomName
varchar
)、
Size
int
)和
LAB
bit

这是
ADD\u 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)
这里是添加房间.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();
        } 
以及“添加房间”窗体中的“代码隐藏”按钮
添加房间

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.cls中:

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

参数[2]。值=实验室?1 : 0; // 不确定,但这可能值得一试。在ADD_ROOM.cls中:

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

参数[2]。值=实验室?1 : 0; // 不确定,但这可能值得一试。在ADD_ROOM.cls中:

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

参数[2]。值=实验室?1 : 0; // 不确定,但这可能值得一试。在ADD_ROOM.cls中:

param[2] = new SqlParameter("@LAB", SqlDbType.Bit);
param[2].Value = LAB ? 1 : 0;    // <---- CHANGE THIS LINE
param[2]=新的SqlParameter(“@LAB”,SqlDbType.Bit);
参数[2]。值=实验室?1 : 0;    //  在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.未选中
  • CheckState.不确定
在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.未选中
  • CheckState.不确定
在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.未选中
  • CheckState.不确定
在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.未选中
  • CheckState.不确定

    • 非常感谢各位。。问题已解决:)

      我在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();
                  }
      
      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));              }
      

      非常感谢各位。。问题已解决:)

      我在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();
                  }
      
      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));              }
      

      非常感谢各位。。问题已解决:)

      我在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();
                  }
      
      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));              }
      

      非常感谢各位。。问题已解决:)

      我在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();
                  }
      
      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));              }
      


      可以添加所有异常的堆栈跟踪吗@FabioIs TXT_ROOM_NAME.Text长度不超过50个符号?TXT\U ROOM\U SIZE.Text是数字吗?TXT\U ROOM\U NAME是一个文本框,从用户处接收字符串,TXT\U ROOM\U SIZE也是一个文本框,从用户处接收整数@26071986能否添加所有异常的堆栈跟踪@FabioIs TXT_ROOM_NAME.Text长度不超过50个符号?TXT\U ROOM\U SIZE.Text是数字吗?TXT\U ROOM\U NAME是一个文本框,从用户处接收字符串,TXT\U ROOM\U SIZE也是一个文本框,从用户处接收整数@26071986能否添加所有异常的堆栈跟踪@FabioIs TXT_ROOM_NAME.Text长度不超过50个符号?TXT\U ROOM\U SIZE.Text是数字吗?TXT\U ROOM\U NAME是一个文本框,从用户处接收字符串,TXT\U ROOM\U SIZE也是一个文本框,从用户处接收整数@26071986能否添加所有异常的堆栈跟踪@FabioIs TXT_ROOM_NAME.Text长度不超过50个符号?TXT\U ROOM\U SIZE.Text是数字吗?TXT\U ROOM\U NAME是一个文本框,从用户处接收字符串,TXT\U ROOM\U SIZE也是一个文本框,从用户处接收整数@26071986I使用sql管理工作室填充了“房间”表,并尝试了更新功能,结果成功了……问题是如何保存初始值。。下面是“更新按钮”私有无效按钮4_Click(对象发送者,事件参数e){ROOM.update_ROOM(TXT_ROOM_ID.Text,TXT_ROOM_NAME.Text,Convert.ToInt32(TXT_ROOM_SIZE.Text),CHECK_LAB.Checked)}@joriot在您给我们的代码中没有方法
      update_ROOM
      @它也在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]=new SqlParameter(@ID_ROOM),SqlDbType.int);param[0]。Value=ID_ROOM;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(“UPDATE_-ROOM”,param);DAL.Close();}”@AnasAl shami Room ID和Room Name在params数组中使用相同的索引,因此您声明了4个值,但只给出了3个值。我的答案仍然相同。在UPDATE_Room.cls中:
      param[2]。