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 size并且extension可以调整。我在想一些方法来做到这一点。就像把它放在应用程序配置中一样:

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

这可能行不通。

例如,如果我想size调整,我该怎么做。因此,当有人在数据库中使用不同类型的列时(比如他们size在数据库中更改为user,他们也可以更改所谓的名称/值:size以及?

可能有一个非常简单的解决方案,如果是这样,我很抱歉。

4

3 回答 3

1

作为namesize是价值观,你宁愿得到column1column2等。如果您想配置字段名称,请从应用程序设置中:

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

让我们分两步完成。第一:在配置中声明 columnKey 并从那里读取

column2 = ConfigurationManager.AppSettings["columnKey"];

2nd:根据key读取值

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 回答