CheckedListBoxControl Devexpress C# ---- 将所有项目保存在 MysQL 数据库中
CheckedListBoxControl Devexpress C# ---- Saving all items in MysQL Database
好的,这是对这个问题的新编辑,正如您将在下面的代码中看到的那样,我这样做是为了遍历每个项目,然后应该获取每个项目的选中和未选中值,然后将它们保存在我的 MySql 数据库中,但是好吧,我保存它的那一刻确实保存了但所有项目都保存在 boolean true 中,而不是我分配的布尔值为 布尔值 。
这意味着如果一个项目被选中,布尔值应该为真,而一个项目没有被选中,布尔值应该为假,并且应该被保存,但是......好吧它保存了一切[=19= 】 没错。
我该如何解决我遇到的这个问题?
private void SbtnGuarda_Click(object sender, EventArgs e)
{
try
{
String id = txtId.Text.Trim();
for (int i = 0; i < CLBCpermits.ItemCount; i++)
{
object Row = CLBCpermits.GetItem(i);
DataRowView rew = Row as DataRowView;
Boolean value = Convert.ToBoolean(CLBCpermits.GetItemCheckState((int)rew["SecOptionId"] - 1));
int opti = (int)rew["SecOptionId"];
string qry = string.Format("INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES ('{0}', '{1}', '{2}');", id, value, opti);
using (MySqlConnection conn = new MySqlConnection(Global.ConnectionStringMySql))
{
conn.Open();
using (MySqlCommand comm = new MySqlCommand(qry, conn))
{
comm.ExecuteNonQuery();
}
conn.Close();
}
}
XtraMessageBox.Show("Permits assigned to profile", "Process Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
SbtnGuarda.Enabled = false;
SbtnActualiza.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error while giving permits", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
非常感谢任何帮助,感谢您第 4 次编辑此内容 post。
首先,使用查询参数。您当前的代码很危险。如果您不确定我为什么这么说,请查找 "SQL Injection"。
现在,使用参数,您将拥有:
var query = "INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES (@id, @optActive, @secOptionId)";
后来……
comm.Parameters.Add("@id", MySqlDbType.Int32).Value = id;
comm.Parameters.Add("@optActive", MySqlDbType.Bit).Value = value;
comm.Parameters.Add("@secOptionId", MySqlDbType.Int32).Value = opti;
comm.ExecuteNonQuery();
我的猜测是,因为您在查询中向 BIT
类型的列提供 String
值,转换正在接管并将所有内容转换为 TRUE
.
好的,这是对这个问题的新编辑,正如您将在下面的代码中看到的那样,我这样做是为了遍历每个项目,然后应该获取每个项目的选中和未选中值,然后将它们保存在我的 MySql 数据库中,但是好吧,我保存它的那一刻确实保存了但所有项目都保存在 boolean true 中,而不是我分配的布尔值为 布尔值 。 这意味着如果一个项目被选中,布尔值应该为真,而一个项目没有被选中,布尔值应该为假,并且应该被保存,但是......好吧它保存了一切[=19= 】 没错。 我该如何解决我遇到的这个问题?
private void SbtnGuarda_Click(object sender, EventArgs e)
{
try
{
String id = txtId.Text.Trim();
for (int i = 0; i < CLBCpermits.ItemCount; i++)
{
object Row = CLBCpermits.GetItem(i);
DataRowView rew = Row as DataRowView;
Boolean value = Convert.ToBoolean(CLBCpermits.GetItemCheckState((int)rew["SecOptionId"] - 1));
int opti = (int)rew["SecOptionId"];
string qry = string.Format("INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES ('{0}', '{1}', '{2}');", id, value, opti);
using (MySqlConnection conn = new MySqlConnection(Global.ConnectionStringMySql))
{
conn.Open();
using (MySqlCommand comm = new MySqlCommand(qry, conn))
{
comm.ExecuteNonQuery();
}
conn.Close();
}
}
XtraMessageBox.Show("Permits assigned to profile", "Process Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
SbtnGuarda.Enabled = false;
SbtnActualiza.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error while giving permits", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
非常感谢任何帮助,感谢您第 4 次编辑此内容 post。
首先,使用查询参数。您当前的代码很危险。如果您不确定我为什么这么说,请查找 "SQL Injection"。
现在,使用参数,您将拥有:
var query = "INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES (@id, @optActive, @secOptionId)";
后来……
comm.Parameters.Add("@id", MySqlDbType.Int32).Value = id;
comm.Parameters.Add("@optActive", MySqlDbType.Bit).Value = value;
comm.Parameters.Add("@secOptionId", MySqlDbType.Int32).Value = opti;
comm.ExecuteNonQuery();
我的猜测是,因为您在查询中向 BIT
类型的列提供 String
值,转换正在接管并将所有内容转换为 TRUE
.