带参数的INSERT命令中的C#代码有什么问题?

时间:2013-09-07 15:08:57

标签: c#

我的朋友们,这些代码出现的问题是“输入字符串的格式不正确”。错误??????????

它出现在行开头* 谁可以帮助我?

 try
        {
            using (SqlConnection con = new SqlConnection(connect))
            {
                using (SqlCommand cmd = new SqlCommand("INSERT INTO fact_info(fact_id, druge,price,amount,total,selldate) VALUES (@C1, @C2, @C3, @C4, @C5 ,@C6)", con))
                {
                    cmd.Parameters.Add(new SqlParameter("@C1", SqlDbType.Int ));
                    cmd.Parameters.Add(new SqlParameter("@C2", SqlDbType.NVarChar));
                    cmd.Parameters.Add(new SqlParameter("@C3", SqlDbType.Int));
                    cmd.Parameters.Add(new SqlParameter("@C4", SqlDbType.Int));
                    cmd.Parameters.Add(new SqlParameter("@C5", SqlDbType.Int));
                    cmd.Parameters.Add(new SqlParameter("@C6", SqlDbType.NVarChar ));
                    con.Open();
                    foreach (DataGridViewRow row in dataGridView1.Rows)
                    {
                        if (!row.IsNewRow)
                        {
                            *****cmd.Parameters["@C1"].Value =Convert .ToInt32 (  label3.Text.Trim());
                            cmd.Parameters["@C2"].Value = row.Cells[1].Value.ToString ();*****
                            cmd.Parameters["@C3"].Value =Convert .ToInt32 ( row.Cells[2].Value.ToString ());
                            cmd.Parameters["@C4"].Value =Convert .ToInt32 ( row.Cells[3].Value.ToString ());
                            cmd.Parameters["@C5"].Value =Convert .ToInt32 ( row.Cells[4].Value.ToString ());
                            cmd.Parameters["@C6"].Value = label5.Text.Trim();
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
        finally
        {
            MessageBox.Show("done! ");
        }
    }

2 个答案:

答案 0 :(得分:3)

哪一行引发错误?如果我猜测,可能是错误发生在这里:

Convert.ToInt32(label3.Text.Trim())

label3.Text的运行时值是多少?如果它不是数字(特定于整数)值,则Convert.ToInt32将抛出异常,因为它无法转换为int。您可能希望在值上添加一些运行时检查:

var factID = 0;
if (!int.TryParse(label3.Text, out factID))
{
    // The label doesn't have an integer.
    // Display an error to the user, perhaps?
    // Either way, don't continue because there will be an error.
}

如果标签有整数,factID将是整数。如果没有,您可以在此处理错误情况。

答案 1 :(得分:1)

label3.Text中的值不是有效整数,因此Convert.ToInt32无法将其解析为int,因此会引发错误。要么在Try...Catch块中处理异常,要么使用Int32.TryParse代替。