【发布时间】:2013-12-22 06:50:44
【问题描述】:
好的,我正在编写一个 WPF 程序,该程序将文本框绑定到 MySQL 表。
[图片已删除 - 显示个人详细信息]
现在,如果我运行,输入详细信息,如上保留一些空白,然后单击保存,然后信息将按预期保存到 mysql 中。如何删除默认的 NULL 值并将单元格留空,这基本上是我想要的。
现在,如果我直接在 MYSQL 中打开数据库并在那里输入另一条记录,则会留下空白字段,并带有 NULL 值。如果您键入内容然后在我注意到的数据库中删除它们,*NULL 值就会消失。
[图片已删除 - 显示个人详细信息]
现在通常这不会是一个问题,但我每次点击 NEXT 时都会收到此错误,这应该会显示下一条记录 错误消息:数据为空。不能对 Null 值调用此方法或属性。 有趣的是,当直接在 MySQL 中运行时,查询似乎可以正常工作。
这是下一个按钮的代码:
//next button command
private void next_Click(object sender, RoutedEventArgs e)
{
//MySQL connection credentials
string sqlcon = "datasource = localhost; port = 3306; username = root; password = Avalisque";
//Query
string query = "select * from clients.parent where tag = (select min(tag) from users.login where tag > '" + this.tag.Text + "' );";
MySqlConnection con = new MySqlConnection(sqlcon);
MySqlCommand cmd = new MySqlCommand(query, con);
MySqlDataReader rdr;
//Excecution
try
{
con.Open();
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//String declarations
string stag = rdr.GetInt32("tag").ToString();
string snumber = rdr.GetInt32("tag").ToString();
string smember = rdr.GetInt32("member").ToString();
string sstatus = rdr.GetString("status");
string sfirst = rdr.GetString("first_name");
string ssecond = rdr.GetString("second_name");
string sthird = rdr.GetString("third_name");
string sfourth = rdr.GetString("surname");
string sdob = rdr.GetString("dob");
string sgender = rdr.GetString("gender");
string scell = rdr.GetString("cell");
string shome = rdr.GetString("home");
string swork = rdr.GetString("work");
string semail = rdr.GetString("email");
string sdoc = rdr.GetString("doc");
string seligible = rdr.GetString("eligible");
string sreason = rdr.GetString("denial_reason");
string sother = rdr.GetString("other");
string sclaim = rdr.GetString("claims");
string srisk = rdr.GetString("risk");
string sowing = rdr.GetString("owing");
string spaid = rdr.GetString("paid");
// Binding strings to textboxes
tag.Text = stag;
number.Text = stag;
member.Text = smember;
status.Text = sstatus;
first_name.Text = sfirst;
second_name.Text = ssecond;
third_name.Text = sthird;
surname.Text = sfourth;
dob.Text = sdob;
gender.Text = sgender;
cell.Text = scell;
home.Text = shome;
work.Text = swork;
email.Text = semail;
doc.Text = sdoc;
eligible.Text = seligible;
reason.Text = sreason;
other.Text = sother;
}
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果我在 C# 应用程序中使用数据网格保存记录,则 NULL 值保持不变。 有没有办法确保默认情况下不将 NULL 值赋予空白单元格?无论如何,文本框是如何做到的?我试过右键单击表格 -> 更改表格 -> 从默认列中删除 null 但它什么也没做。
我将大量使用数据网格来插入记录,但如果文本框不能用于浏览它们,那么......我想你现在已经明白了。有什么办法可以解决这个问题?如果没有,有什么替代方案吗?
【问题讨论】:
-
您可以在这里使用多种解决方案:更改您的数据库结构以不允许您的 char 列为空。您可以将它们的默认值设置为 ''(空字符串)。另一种解决方案是直接在您的代码中管理它,例如:
email.Text = semail ?? String.Empty;. -
最简单的方法是将列默认更改为
''而不是 null,这样您就不必更改代码。ALTER TABLE tablename CHANGE columnname columnname VARCHAR(10) DEFAULT '' NOT NULL -
顺便说一句,您不应该像
cell.Text = scell;那样直接设置输入值。你应该使用 WPF 绑定:看看this documentation -
已删除图像并显示个人数据。也标记为 mod 注意。
-
异常信息还是一样:Data is Null。不能对 Null 值调用此方法或属性。