-1

FormatException这行代码中总是有一个抛出,它说:

输入字符串的格式不正确。

这是代码:

private void btnRegister_Click(object sender, EventArgs e)
{
    try
    {
        con.Open();
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = con;
        cmd.CommandType =CommandType.Text;

        cmd.CommandText = "SELECT DriverID, FirstName, LastName FROM Driver WHERE FirstName = @FirstName AND LastName = @LastName or DriverID = @DriverID";
        cmd.Parameters.AddWithValue("@FirstName", MySqlDbType.VarChar).Value = txtEmployeeFN.Text;
        cmd.Parameters.AddWithValue("@LastName", MySqlDbType.VarChar).Value = txtEmployeeLN.Text;
        cmd.Parameters.AddWithValue("@DriverID", MySqlDbType.VarChar).Value = txtEmpID.Text;
        MySqlDataAdapter adp = new MySqlDataAdapter();
        adp.SelectCommand = cmd;

        DataTable Mydt = new DataTable();

        adp.Fill(Mydt); <===Here is the line where the exception is

        con.Close();
4

4 回答 4

1

您不需要 AddWithValue 和.Value. 利用:

        cmd.Parameters.AddWithValue("@FirstName", txtEmployeeFN.Text);
        cmd.Parameters.AddWithValue("@LastName", txtEmployeeLN.Text);
        cmd.Parameters.AddWithValue("@DriverID", txtEmpID.Text);

如果要强制类型,请使用Add

    cmd.Parameters.Add("@FirstName", MySqlDbType.VarChar).Value = txtEmployeeFN.Text;
    cmd.Parameters.Add("@LastName", MySqlDbType.VarChar).Value = txtEmployeeLN.Text;
    cmd.Parameters.Add("@DriverID", MySqlDbType.VarChar).Value = txtEmpID.Text;

顺便检查一下,确保你的表格字段都是 VarChars。

于 2012-11-01T13:09:06.007 回答
0

你不需要像这样添加参数,你应该简单地试试这个:-

cmd.CommandText = string.format(
"SELECT DriverID, FirstName, LastName 
FROM Driver WHERE FirstName = {0} AND LastName = {1} OR DriverID = {2}", 
txtEmployeeFN.Text.trim(),txtEmployeeLN.Text.trim(), txtEmpID.Text.trim());

如果输入字符串的格式仍然不正确,则说明存在语法问题。

为什么不在 Visual Studio 中打开服务器资源管理器并在您创建的数据连接上创建查询,它模仿您在代码中所做的事情。

Visual Studio 将显示您需要在代码中使用的 SQL 查询文本。

于 2012-11-01T13:28:25.137 回答
0

我看到一些可能是问题的事情:

SELECT DriverID, FirstName, LastName 
FROM Driver 
WHERE FirstName = @FirstName 
    AND LastName = @LastName 
    or DriverID = @DriverID
  1. DriverID 是整数吗?如果是这样,参数类型应该是整数,而不是VarChar
  2. 如果@DriverID不是字符串格式的有效整数值,则可能引发此异常
  3. 您的 where 子句可能无效。您应该对您正在使用的条件进行分组OR


  WHERE (FirstName = @FirstName 
    AND LastName = @LastName)
    or DriverID = @DriverID
于 2012-11-01T13:13:02.823 回答
0

像这样使用AddWithValue

cmd.CommandText = "SELECT DriverID, FirstName, LastName FROM Driver WHERE FirstName = @FirstName AND LastName = @LastName or DriverID = @DriverID";
cmd.Parameters.AddWithValue("@FirstName", txtEmployeeFN.Text);
cmd.Parameters.AddWithValue("@LastName", txtEmployeeLN.Text);
cmd.Parameters.AddWithValue("@DriverID", txtEmpID.Text);

但请注意,如果您使用的是ODBC,则不能使用命名参数。您必须使用位置参数。

于 2012-11-01T13:08:57.580 回答