如何在C#中的SQL Server数据库中保存CheckBox值
我正在研究Windows窗体应用程序,我创建了一个包含房间名称,大小和LAB的房间窗体。如何在C#中的SQL Server数据库中保存CheckBox值
在数据库中的表中包含的列RoomName
(varchar
),Size
(int
),和LAB
(bit
)。
这是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
代码和错误是
输入字符串的不正确的格式
在你的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
谢谢马克,但仍然没有工作:(@marc_s – 2014-10-09 09:25:48
不知道,但是这可能是值得一试。在ADD_ROOM.cls:布尔的
param[2] = new SqlParameter("@LAB", SqlDbType.Bit);
param[2].Value = LAB ? 1 : 0; // <---- CHANGE THIS LINE
值作为参数可被转换成0或1以外的内容,这是由SQL服务器的预期。
我使用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
你给我们的代码中没有'UPDATE_ROOM'方法。 @Anas Al-shami – JoriO 2014-10-09 09:22:37
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
谢谢你这么多家伙..问题就解决了:)
我改变了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)); }
你能添加所有异常的堆栈跟踪吗? – Fabio 2014-10-09 09:03:55
http://im84.gulfup.com/wFq8fH.jpg – 2014-10-09 09:14:09
http://im84.gulfup.com/wFq8fH.jpg @Fabio – 2014-10-09 09:21:36