我有一个Form包含3个TextBox,一个comboBox和一个DatagridView,其中一个客户端为TextBox1添加一个int或者在TextBox2或TextBox3中一个Text的一部分,或者对于更多规范,他可以选择一个comboBox1的项目结果显示在dataGridView(numeo_cpte,intitulé_cpte)中。我的问题是我在dataGridview中获得了结果的northig并且int =>转换的错误输入数据的格式不正确
这是我的代码:
private void button5_Click(object sender, EventArgs e)
{
int a =Convert.ToInt32(textBox1.Text); //format of enetered data is incorrect
String b = textBox3.Text;
String c = comboBox1.SelectedItem.ToString();
String d = textBox4.Text;
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
req="select numero_cpte,intitulé_cpte from compte where numero_cpte='"+a+"' OR intitulé_cpte like '%"+b+"%' OR type_cpte='"+c+"' OR index_full_text_cpte like'%"+d+"%';";
SqlCommand sql = new SqlCommand(req,connection);
int o = sql.ExecuteNonQuery();
MessageBox.Show(o + " succès");
dr = new SqlDataAdapter(req, connection);
dr.Fill(ds, "compte");
compteDataGridView.DataSource = ds.Tables["compte"];
connection.Close();
我添加了一行
int n=0;
int a =int.TryParse(textBox1.Text,out n)?n:0;
这就是我得到的,没有错误,但我没有在datagridView中显示任何结果:
我为测试做了“成功” 再次感谢您的帮助
答案 0 :(得分:2)
如果字符串未格式化为整数,则会发生此错误。 例如:
Convert.ToInt32("1") // returns 1
Convert.ToInt32("1.1") // is not in a recognizable format
您应该尝试使用正则表达式首先应用某些格式或使用try / catch语句。如果您仍然遇到问题,可以在此位置设置调试断点并向我们提供textbox1.Text提供的有问题字符串的副本吗?
希望这有帮助!
答案 1 :(得分:2)
添加try catch来处理任何错误并记录它们:
StreamWriter sw=new StreamWriter(path,true);
private void button5_Click(object sender, EventArgs e)
{ try
{
int a = Int32.Parse(textBox1.Text);
///...
}
catch (Exception ex)
{
sw.WriteLine(ex.Message);
}
}
编辑: 正如大多数人所指出的那样,很可能你的问题在于Textbox1没有被有效的字符串重复整数所取代。但无论如何,这个结论必须来自外部日志而不是你的程序,因为它无法处理给定的异常。
答案 2 :(得分:1)
从以下陈述中替换int a =Convert.ToInt32(textBox1.Text);
。
int n = 0;
int a = int.TryParse(textbox1.Text, out n)?n:0;
在上述情况下,如果textbox1.Text
是有效整数,那么您将获得a
的结果,否则您将得到0。
答案 3 :(得分:1)
您是否使用此参数检查您的直接查询(如
)--Replace the value with actual value
select numero_cpte,intitulé_cpte from compte where numero_cpte=cast(123 as int) OR intitulé_cpte like '%abc%' OR type_cpte='ddd' OR index_full_text_cpte like'%dasdf%';";
请在您的查询中添加强制转换,并删除 a 参数附近的单引号(')。
req="select numero_cpte,intitulé_cpte from compte where numero_cpte=cast("+a+" as int) OR intitulé_cpte like '%"+b+"%' OR type_cpte='"+c+"' OR index_full_text_cpte like'%"+d+"%';";