如何在C#中保存SQL Server数据库中的CheckBox值

本文关键字:数据库 CheckBox Server 保存 SQL | 更新日期: 2023-09-27 18:26:04

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

数据库中的表包含列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 中按钮ADD Room后面的代码

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

错误是

输入字符串的格式不正确

如何在C#中保存SQL Server数据库中的CheckBox值

在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

不确定,但这可能值得一试。在ADD_ROOM.cls:中

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

作为参数的布尔值可以转换为sql server所期望的0或1以外的值。

非常感谢大家。。问题解决了:)

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