【问题标题】:Get string values from database without null values C#从数据库中获取没有空值的字符串值C#
【发布时间】:2014-12-26 22:44:46
【问题描述】:

在我的应用程序中,我想将两个文本框自动完成方法与 mysql 数据库列链接起来。第一列有 3 个值,第二列有 7 个值。

喜欢这个

+---------+---------------+--------------+
+appsetid +   category    + subcategory  + 
+---------+---------------+--------------+
+  1      + property pres + Bankruptcy   +
+  2      + attorney      + app          +
+  3      + valuation     + unknown      +
+  4      +  -null-       + mitigate     + 
+  5      +  -null-       + property re  +
+  6      +  -null-       + close        +
+  7      +  -null-       + unk12        +
+---------+---------------+--------------+

我希望将此列值作为我的文本框自动完成值。但在我调用下面的方法后,第一个文本框自动完成获取 3 个值,但第二个文本框自动完成仅完成第一个 3 个值。我尝试使用 isnullorempty 填充文本框,但它不起作用

这是我用来填充文本框自动完成的代码。

两个文本框 Autocompletemode 设置为Suggestappend 和autocompleet source 设置为customsource

private void maintxtautocomplete()
{
    AutoCompleteStringCollection call = new AutoCompleteStringCollection();
    AutoCompleteStringCollection call2 = new AutoCompleteStringCollection();

    string constring = string.Format("Server=127.0.0.1;Database=claimspro;Uid=root;Pwd=***************;");
    string Query1 = "select * from appsettings ;";
    MySqlConnection conwaqDatabase2 = new MySqlConnection(constring);
    MySqlCommand cmdwaqDatabase2 = new MySqlCommand(Query1, conwaqDatabase2);
    MySqlDataReader myreader;

    try
    {
        conwaqDatabase2.Open();
        myreader = cmdwaqDatabase2.ExecuteReader();

        while (myreader.Read())
        {
            string sName2 = myreader.GetString("subcategory");
            if (!string.IsNullOrEmpty(sName2))
            {
                call.Add(sName2);
            };

            string sName1 = myreader.GetString("category");
            if (!string.IsNullOrEmpty(sName1))
            {
                call2.Add(sName1);
            };
        }
    }

    catch
    {
    }

    categorytxtbox.AutoCompleteCustomSource = call2;
    subcategorytxtbox.AutoCompleteCustomSource = call;
    conwaqDatabase2.Close();
}

【问题讨论】:

  • 有人知道如何解决这个问题吗? :(

标签: c# mysql autocomplete textbox


【解决方案1】:

我发现使用扩展方法对此很有用:

    public static class DataReaderExtensions
    {

            public static string GetStringOrNull(this IDataReader dataReader, string columnName)
            {
                    try
                    {
                            object value = dataReader[columnName];
                            return (value == null || value == DBNull.Value) ? null : (string)value;
                    }
                    catch (Exception exception)
                    {
                            throw new ApplicationException(String.Format("Invalid 'String' data type for column '{0}'", columnName), exception);
                    }
            }

            ...
    }

这将允许您执行以下操作:

using Extensions; // your extension namespace

string sName2 = myreader.GetStringOrNull("subcategory");
if (!string.IsNullOrEmpty(sName2))
{
...

【讨论】:

    【解决方案2】:

    最后我解决了我的问题,用 dbnull if 语句包装我的转换方法

     if (myreader["category"] != DBNull.Value)
           {
              string sName1 = myreader.GetString("category");
              call2.Add(sName1);
              comboBox1.Items.Add(sName1);
           };
    
      if (myreader["subcategory"] != DBNull.Value)
           {
              string sName2 = myreader.GetString("subcategory");
              call.Add(sName2);
              comboBox2.Items.Add(sName2);
           }; 
    

    感谢所有试图帮助我的人:)

    【讨论】:

      【解决方案3】:

      当尝试将 NULL 从数据库转换为字符串时,GetString 方法将引发异常。所以发生的事情是,在第 4 条记录中,它掉到了你的空捕获中。您需要在强制转换之前检查该值是否为 NULL。

      您需要将代码更改为以下内容:

      var catValue = myreader.GetValue("category");
      string sName1 = catValue == DBNull.Value ? string.Empty : catValue.ToString(); 
      

      【讨论】:

      • 这不起作用,它给了我错误,例如 isdbnull 在当前上下文中不存在
      猜你喜欢
      • 2013-06-08
      • 2015-10-15
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多