0

わかりました、ここで問題が発生しています。私の場合、アプリ構成で何が機能するのか疑問に思っていました。これは私のコードです:

name = Path.GetFileNameWithoutExtension(filepath);
extension = Path.GetExtension(e.FullPath);
size = e.Name.Length;
strSelectCmd = "INSERT INTO" + tablemysql + " ("+column1+","+column2+","+column3+","+column4+") VALUES('" + name + "','" + size + "',now(),'" + extension + "')";

ここで、変数の値が必要です。調整可能にする必要がありますname sizeextensionこれを行う方法をいくつか考えていました。これをアプリの設定に入れるように:

<add key="value1" value="e.Name.Length"/>

これはおそらくうまくいきません。

sizeたとえば、調整可能にしたい場合はどうすればよいですか。したがって、誰かがデータベースで別の種類の列を使用する場合 (sizeデータベースを に変更するuserように、いわゆる: の名前/値も変更できsizeますか?

これには非常に簡単な解決策があるかもしれません。

4

3 に答える 3

1

nameandsizeが値であるため、and などを取得することをcolumn1column2勧めします。フィールド名を構成可能にしたい場合は、アプリケーション設定から:

column1 = ConfigurationManager.AppSettings["name"];

テーブル名とフィールド名のみを文字列に連結します。値にはパラメーターを使用します。あなたの実装は、SQL インジェクション攻撃に対して無防備でした。

strSelectCmd = "INSERT INTO `" + tablemysql + "` (`"+column1+"`,`"+column2+"`,`"+column3+"`,`"+column4+"`) VALUES(@name,@size,@time,@extension)";

誰かが SQL キーワードを識別子として使用した場合にコードが壊れないように、識別子をバッククォートで囲みます。

(変数名から、tablemysqlMySQL をデータベースとして使用していると推測しています。)

編集:

値を構成可能にするには、文字列を使用してさまざまな値の範囲を指定する方法を設定する必要があります。利用可能な値で辞書を作成できます。

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));
于 2013-10-29T08:40:15.853 に答える
0

これらを構成ファイルに入れることは有効なオプションです。簡単にするために、これにはAppSettingsを使用できます(XML の抜粋を参照してください)。ConfigurationManagerを使用して AppSettings にアクセスできます。

size = String.IsNullOrEmpty(ConfigurationManager.AppSettings["size"] ? e.Name.Length : int.Parse(ConfigurationManager.AppSettings["size"];

ConfigurationManager を使用するには、System.Configuration アセンブリへの参照を追加する必要がある場合があります。

于 2013-10-29T08:40:20.223 に答える
0

2ステップでできます。1つ目:構成でcolumnKeyを宣言し、そこから読み取る

column2 = ConfigurationManager.AppSettings["columnKey"];

2番目: キーに基づいて値を読み取る

string size = GetSizeValue(column2, e);

GetSizeValue は次のようになります。

private static string GetSizeValue(string columnKeyValue, SomeArgsType e)
    {
        switch (columnKeyValue)
        {
            case "size":
                return e.Name.Length;
            case "user":
                return e.Name.User; // or something else
        }

        throw new Exception("Invalid Entry");
    }
于 2013-10-29T09:11:38.893 に答える