C# 应用配置数据库变量
本文关键字:变量 数据库 配置 应用 | 更新日期: 2023-09-27 18:37:10
好的,我在这里遇到了一些问题。我想知道在我的情况下什么对我的应用程序配置有用。这是我的代码:
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
?
可能有一个非常简单的解决方案,如果是这样,我很抱歉。
由于值name
和size
,如果您希望字段名称可配置,则宁愿从应用程序设置中获取column1
和column2
et.c.:
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));
将这些放入配置文件中是一个有效的选项。为简单起见,您可以使用应用程序设置(请参阅 XML 摘录)。你可以使用 配置管理器 访问应用设置:
size = String.IsNullOrEmpty(ConfigurationManager.AppSettings["size"] ? e.Name.Length : int.Parse(ConfigurationManager.AppSettings["size"];
为了使用 ConfigurationManager,您可能需要添加对 System.Configuration 程序集的引用。
让我们分两步完成。 第一:在配置中声明列键并从那里读取
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");
}