0

私はしばらくの間 MySQL を使用していますが、ファイルをアップロードする必要が生じたのはつい最近のことです。シナリオは次のとおりです。.NET コネクタで実行されている C# コンソール アプリケーションがあり、ユーザーが PDF ファイルをアップロードして、外部キーを使用して特定のテーブルに挿入できるようにする必要があります。

したがって、コマンドの接続を定義すると、次のようになります。

    command.CommandText =  "INSERT INTO targetTable (ForeignKey,file) VALUES (@key, @arq);";
    MySqlParameter FKParam = new MySqlParameter("@key", MySqlDbType.Int32,3);
    FKParam.Value = _value; //Received as a function parameter
    MySqlParameter fileParam new MySqlParameter("@arq", MySqlDbType.Blob,bytes.length);
    FKParam.Value = bytes; //is the name of the variable which holds the readed bytes from a file.
    command.Parameters.Add(FKParam);
    command.Parameters.Add(fileParam);
    command.ExecuteNonQuery();

このコードは完全に機能します...そうでないことを除いて。つまり、ファイル列がnullであることを除いて、新しい行が作成されました。

テーブル構造は次のとおりです。

    mysql> show columns from targetTable ;
    +---------------------+--------------+------+-----+-------------------+-----------------------------+
    | Field               | Type         | Null | Key | Default           | Extra                       |
    +---------------------+--------------+------+-----+-------------------+-----------------------------+
    | targetTableID       | int(3)       | NO   | PRI | NULL              | auto_increment              |
    | ForeignKey          | int(3)       | YES  |     | NULL              |                             |
    | file                | mediumblob   | YES  |     | NULL              |                             |                  
    +---------------------+--------------+------+-----+-------------------+-----------------------------+
   3 rows in set (0.00 sec)
4

1 に答える 1

0

OK、自己回答でごめんなさい。この解決策を見つけようとして、アヒルに座ってほぼ2日間過ごしただけです. そのため、他のさまざまなツールを使用して、PHPadmin と SQL Workbench を含むわずか 105KiB のファイルをアップロードするプロセスをチェックした後、(ついに!!) 何かが足りないことに気付きました (まあ、当然です!)。

接続文字列でも、データ型でも、パラメーターを挿入した方法でもありません( に を追加する方法に関する投稿がありParameter、とParameterCollecionで競合しました。どちらも機能します) 。繰り返しますが、105 KiB ファイルで「クラッシュ」していました!Add(new Parameter)AddWithValue(paramName,value)

それで、... を作成したところ、ファイル列が null であるだけでなく、FK 列も null であることSELECT * FROM targetTableに気付きました。

   mysql> SELECT * FROM targetTable;
    +---------------+------------+-----+
    | targetTableID | ForeignKey | arq |
    +---------------+------------+-----+
    |             1 |    NULL    | NULL|
    +---------------+------------+-----+
    1 row in set (0.00 sec)

その時までに、パラメーターが文字で設定されていることに気付きました@。これは、Microsoft SQL Server の変数では一般的です。そしてその時までに、グローバル/プライベート変数を指す傾向があるため、この文字はMySQLで使用する明るい頭脳を持つものではないことに気付きました.

解決?@key@arq?key?arq に置き換えます

    MySqlParameter FKParam = new MySqlParameter("@key", MySqlDbType.Int32,3);
    FKParam.Value = _value; //Received as a function parameter
    MySqlParameter fileParam new MySqlParameter("@arq", MySqlDbType.Blob,bytes.length);

そして、幸せになります!

于 2013-11-09T14:08:37.953 に答える