在我的应用程序中,我想将两个文本框自动完成方法与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源设置为海关来源
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();
}
答案 0 :(得分:0)
当尝试将数据库中的NULL转换为字符串时,GetString方法将引发异常。所以正在发生的事情是,在第4个记录中它正在落空你的空洞。在转换之前,您需要检查值是否为NULL。
您希望将代码更改为以下内容:
var catValue = myreader.GetValue("category");
string sName1 = catValue == DBNull.Value ? string.Empty : catValue.ToString();
答案 1 :(得分:0)
我发现使用对此有用的扩展方法:
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 :(得分:0)
最后我用dbnull if语句
包装我的cast方法解决了我的问题 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);
};
感谢所有试图帮助我的人:)