好的,我有点问题。我想知道在我的情况下我的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
size
和extension
可调。我在考虑一些方法来做到这一点。
就像把它放在应用程序配置中一样:
<add key="value1" value="e.Name.Length"/>
这可能不会起作用。
如果我希望例如size
可调,我该怎么办?因此,当有人在数据库中使用不同类型的列时(比如他们将数据库中的size
更改为user
,他们可以更改所谓的size
的名称/值?
对此可能有一个非常简单的解决方案,如果有的话,我很抱歉。
答案 0 :(得分:1)
由于name
和size
是值,您宁愿获得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));
答案 1 :(得分:0)
将这些放入配置文件是一个有效的选项。为简单起见,您可以使用AppSettings(请参阅XML摘录)。 您可以使用ConfigurationManager:
访问AppSettingssize = 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");
}