Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL空值干扰C#应用程序_C#_Mysql_Wpf - Fatal编程技术网

MYSQL空值干扰C#应用程序

MYSQL空值干扰C#应用程序,c#,mysql,wpf,C#,Mysql,Wpf,好的,我正在编写一个WPF程序,它将文本框绑定到MySQL表 [图像已删除-显示个人详细信息] 现在,如果我运行,输入详细信息,像上面一样保留一些空白,然后单击save,那么信息将按预期保存到mysql中。如何删除默认的NULL值,并将单元格留空,这基本上就是我想要的 现在,如果我直接在MYSQL中打开数据库并在那里输入另一条记录,空白字段将保留NULL值。如果您键入一些内容,然后在我注意到的数据库中删除它们,*NULL值就会消失 [图像已删除-显示个人详细信息] 现在正常情况下这不会是一个问题

好的,我正在编写一个WPF程序,它将文本框绑定到MySQL表

[图像已删除-显示个人详细信息]

现在,如果我运行,输入详细信息,像上面一样保留一些空白,然后单击save,那么信息将按预期保存到mysql中。如何删除默认的NULL值,并将单元格留空,这基本上就是我想要的

现在,如果我直接在MYSQL中打开数据库并在那里输入另一条记录,空白字段将保留NULL值。如果您键入一些内容,然后在我注意到的数据库中删除它们,*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#应用程序中使用datagrid保存记录,NULL值保持不变。 是否有办法确保默认情况下不将NULL值指定给空白单元格?文本框是怎么做到的?我尝试右键单击表->更改表->从默认列中删除空值,但没有任何效果


我知道datagrid将被大量用于插入记录,但是如果文本框不能用于浏览记录,那么。。。我想你现在明白了。有办法解决这个问题吗?如果没有,还有其他选择吗?

在获取
字符串
值之前,只需检查每个列的值,或者可以将函数设计为

public static string GetString(SqlDataReader reader, string colName)
{
    if (reader[colName] == DBNull.Value)
        return string.Empty;
    else
        return (string)reader[colName];            
}
并将其用作

string sclaim = GetString(rdr,"claims");
编辑您还将
int
转换为
字符串
的部分,以便您可以使用单个函数

public static string GetColumnValueAsString(SqlDataReader reader, string colName)
{
    if (reader[colName] == DBNull.Value)
        return string.Empty;
    else
        return reader[colName].ToString();        
}
然后,您可以使用单个函数访问所有列,而不必担心
null

    string stag = GetColumnValueAsString(rdr, "tag");
    string snumber = GetColumnValueAsString(rdr, "tag");
    string smember = GetColumnValueAsString(rdr, member);
    string sstatus = GetColumnValueAsString(rdr,"status");

在获取
字符串
值之前,只需检查每个列的值,或者可以将函数设计为

public static string GetString(SqlDataReader reader, string colName)
{
    if (reader[colName] == DBNull.Value)
        return string.Empty;
    else
        return (string)reader[colName];            
}
并将其用作

string sclaim = GetString(rdr,"claims");
编辑您还将
int
转换为
字符串
的部分,以便您可以使用单个函数

public static string GetColumnValueAsString(SqlDataReader reader, string colName)
{
    if (reader[colName] == DBNull.Value)
        return string.Empty;
    else
        return reader[colName].ToString();        
}
然后,您可以使用单个函数访问所有列,而不必担心
null

    string stag = GetColumnValueAsString(rdr, "tag");
    string snumber = GetColumnValueAsString(rdr, "tag");
    string smember = GetColumnValueAsString(rdr, member);
    string sstatus = GetColumnValueAsString(rdr,"status");

问题是字符串没有初始化,它们实际上是空值,我的建议是:

if(string.IsNullOrEmpty(stringValue)) stringValue ="";

将这一点应用到字符串中,应该可以消除这个问题。

问题在于字符串没有初始化,它们实际上是空值,我的建议是:

if(string.IsNullOrEmpty(stringValue)) stringValue ="";


将其应用到字符串中,应该可以消除这个问题。

您可以在这里使用多种解决方案:更改数据库结构,使您的char列不允许为null。您可以将其默认值设置为“”(空字符串)。另一个解决方案是直接在代码中管理它,例如:
email.Text=semail??字符串。空。最简单的方法是将列默认值改为
'
,而不是null,这样就不必更改代码
ALTER TABLE tablename CHANGE columnname columnname VARCHAR(10)默认值“”不为空。您应该使用WPF绑定:查看已删除的图像和显示的个人数据。也正在标记mod attention。异常消息仍然相同:数据为空。无法对Null值调用此方法或属性。您可以在此处使用多种解决方案:更改数据库结构以不允许char列为Null。您可以将其默认值设置为“”(空字符串)。另一个解决方案是直接在代码中管理它,例如:
email.Text=semail??字符串。空。最简单的方法是将列默认值改为
'
,而不是null,这样就不必更改代码
ALTER TABLE tablename CHANGE columnname columnname VARCHAR(10)默认值“”不为空。您应该使用WPF绑定:查看已删除的图像和显示的个人数据。也正在标记mod attention。异常消息仍然相同:数据为空。无法对空值调用此方法或属性。谢谢。真正地在大多数情况下,它实际上是有效的。当我要求时,它进入下一个记录,这基本上就是我要求的解决方案。问题是,每次我点击下一步,该死的错误信息总是弹出。有什么线索吗?每次我在通过datagrid或MySQL表编辑器输入记录时单击next,我的意思是…@Offer你能粘贴ExceptionTanks a bunch mate中获得的堆栈跟踪或异常详细信息吗。真正地在大多数情况下,它实际上是有效的。当我要求时,它进入下一个记录,这基本上就是我要求的解决方案。问题是,每次我点击下一步,该死的错误信息总是弹出。有什么线索吗?每次我在通过datagrid或MySQL表编辑器输入记录时单击next,我的意思是…@Offer你能粘贴exceptionMuch Aydin中获得的堆栈跟踪或异常详细信息吗。但按顺序应用解决方案,dbw在这方面做得很好。给了他荣誉,但还是要感谢他。非常感谢艾丁。但按顺序应用解决方案,dbw在这方面做得很好。给了他荣誉,但还是少谢了他。