-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

You don't need to add parameters like this, you should simply try this :-

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());

If the Input String is still an incorrect format then you have a syntax issue.

Why not open Server Explorer in Visual Studio and a create Query on the Data Connection you have made, that mimics what your doing in code.

Visual Studio will show you the SQL query text that you need to use in your code.

于 2012-11-01T13:28:25.137 に答える
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 に答える
0

問題になる可能性のあるいくつかのことがわかります。

SELECT DriverID, FirstName, LastName 
FROM Driver 
WHERE FirstName = @FirstName 
    AND LastName = @LastName 
    or DriverID = @DriverID
  1. DriverID は整数ですか? その場合、パラメータの型は整数ではなく、整数でなければなりませんVarChar
  2. 文字列形式の有効な整数値でない場合@DriverID、この例外が発生する可能性があります
  3. where句はおそらく無効です。あなたがORingしている条件をグループ化する必要があります:


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