C#app配置数据库变量

时间:2013-10-29 08:33:05

标签: c# app-config

好的,我有点问题。我想知道在我的情况下我的app配置会起什么作用。这是我的代码:

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的名称/值?

对此可能有一个非常简单的解决方案,如果有的话,我很抱歉。

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

将这些放入配置文件是一个有效的选项。为简单起见,您可以使用AppSettings(请参阅XML摘录)。 您可以使用ConfigurationManager

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

为了使用ConfigurationManager,您可能需要添加对System.Configuration程序集的引用。

答案 2 :(得分:0)

让我们分2步完成。 1st:在配置中声明columnKey并从那里读取

column2 = ConfigurationManager.AppSettings["columnKey"];

2nd:根据键

读取值
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");
    }