2016-11-30 7 views
3

Microsoft Accessデータベースにファイルパスを保存しようとすると問題が発生します。下のコードから画像の場所を削除すると、私は私のコードは、SQLインジェクションに開いている知っているが、私は、後の状態でそれを修正しますデータベースへのファイルパスを保存しようとするとエラーが発生する

string query = "INSERT INTO Company(companyName, phone, website, address, companyType, description, image) VALUES('" + 
      company.getName() + "','" + company.getPhone() + "','" + company.getWebsite() + "','" + 
      company.getAddress() + "','" + company.getType() + "','" + company.getDescription() + "','" + 
      company.getImage() + "')"; 

...私は構文エラーを取得したファイルのパスを保存しよう...以下

がクエリでありますまた、パラメータ化されたクエリを使用して問題の解決に役立つかどうかを確認しましたが、それは役に立ちません。

私もこのように高く評価されるだろう「/」

すべてのヘルプで「\」を置き換える試みた

+1

company.getImage()が返すサンプルを表示できますか? – n8wrl

+1

イメージ列のデータ型は何ですか?正確なエラーは何ですか? –

+0

データ型は短いテキストと長いテキストの両方であり、通常は "Q:\ Database \ Profiles \ ProfilePhotos \ depp.jpg"のようなものを返します –

答えて

3

画像はMS-Accessデータベースエンジンの予約語である...私は本当に迷惑です。あなたのようなクエリではそのまま使用することはできません。あなたは、文字列の連結によって引き起こされる問題を認識しているならば、私は本当にあなたができるだけ早く切り替えることをお勧め

....., [Image]) VALUES (..... 

(フィールド名は、将来的に同様の問題を回避するために、というかそれ以上の変化)、角括弧の間にそれをカプセル化する必要がありますパラメータ化されたクエリが可能です。 (たとえば、company.getDescriptionが一重引用符を含む値を返す場合はどうなると思いますか?)

私が感じるもう1つの重要なアドバイスは、Javaのような姿勢を放棄してクラスのプロパティを返すことです接頭辞付きのメソッドを取得/設定します。 C#の最も顕著な特徴の1つはプロパティです。それらを使用してください。

public class Company 
{ 
    public string Description {get;set;} 
    public string Phone {get;set;} 
    .... and so on... 
} 
+0

....最も簡単な解決策を考えるとき、どうもありがとうございました。できれば答えると思います。 –

+1

ああ、スクリプトを書くときにSQLでカラム名を "エスケープ"しなければならなかった回数。特に「キー」と「バリュー」のもの...良い答え、スティーブ:) –

+1

もし私が2回+1することができれば!本当にSOメンバーが元の質問よりも深いものを見るために余分に行っていることを知っていて本当にうれしく思います。 –

関連する問題