name
andsize
が値であるため、and などを取得することをcolumn1
おcolumn2
勧めします。フィールド名を構成可能にしたい場合は、アプリケーション設定から:
column1 = ConfigurationManager.AppSettings["name"];
テーブル名とフィールド名のみを文字列に連結します。値にはパラメーターを使用します。あなたの実装は、SQL インジェクション攻撃に対して無防備でした。
strSelectCmd = "INSERT INTO `" + tablemysql + "` (`"+column1+"`,`"+column2+"`,`"+column3+"`,`"+column4+"`) VALUES(@name,@size,@time,@extension)";
誰かが SQL キーワードを識別子として使用した場合にコードが壊れないように、識別子をバッククォートで囲みます。
(変数名から、tablemysql
MySQL をデータベースとして使用していると推測しています。)
編集:
値を構成可能にするには、文字列を使用してさまざまな値の範囲を指定する方法を設定する必要があります。利用可能な値で辞書を作成できます。
Dictionary<string, object> values = new Dictionary<string, object>();
values.Add("name", name);
values.Add("size", size);
values.Add("time", time);
values.Add("extension", extension);
values.Add("user", user);
設定から文字列を取得し、対応する値を取得するために使用できます。
object value1 = values[ConfigurationManager.AppSettings["value1"]];
object value2 = values[ConfigurationManager.AppSettings["value2"]];
object value3 = values[ConfigurationManager.AppSettings["value3"]];
object value4 = values[ConfigurationManager.AppSettings["value4"]];
クエリは、値のパラメーターを指定します。
strSelectCmd = "INSERT INTO `" + tablemysql + "` (`"+column1+"`,`"+column2+"`,`"+column3+"`,`"+column4+"`) VALUES(@value1,@value2,@value3,@value4)";
クエリで使用するパラメーター オブジェクトを作成するときに、これらの変数を使用できるようになりました。例:
command.Parameters.Add(new OleDbParameter("@value1", value1));