我正在寻找一种解决方案,使用3个参数在表中插入一些数据,第一个是表名,第二个是具有名称和值的类的List属性。 我有一个部分解决方案(下面),但我不认为这是建议,所以,我寻找一个最佳做法来做到这一点。SQL中无字段名称的动态插入
如果可能的话,我想建议使用参数来创建,以避免注入。
private void InsertMetada(string deviceType, List<DeviceFields> deviceFields)
{
DataBaseConnection database = new DataBaseConnection();
database.Open();
StringBuilder strb = new StringBuilder();
stb.Append(string.Format("INSERT INTO DEVICE_{0} (", deviceType.ToString().ToUpper()));
foreach (var item in deviceFields)
{
strb.Append(string.Format(" {0}, ",item.name.ToString()));
}
stb.Append(") VALUES (");
foreach (var item in deviceFields)
{
strb.Append(string.Format(" '{0}', ", item.value.ToString()));
}
strb.Append(")");
database.executeQuery(strb.ToString());
database.Close();
}
编辑:我不认为我是在我的问题很清楚。 在这种情况下,DeviceFields.item.name
与表字段的名称相同。
我在寻找的是保证创建不同的设备属性,为不同的表在不同的设备类型。也许我的观点不是正确的,但我想如果我有分开的表格,我可以执行快速搜索。 在这个例子中我的表(DEVICE_KEYBOARD)看起来是这样的:
> FIELD NAME | TYPE
-------------|---------
language | varchar
key | varchar
isMultimedia | varchar
deviceID | varchar
和列表看起来像
> DeviceFields[0]:
name = language
value = en-us
> DeviceField[1]:
name = key
value = 102
> DeviceField[2]:
name = isMultimedia
value = Yes
> DeviceField[3]:
name = deviceID
value = 0000-0000-00000-00000
,第二个表,例如是这样的:
TABLE DEVICE_SPEAKER
> FIELD NAME | TYPE
--------------|---------
rms | varchar
remoteControl | varchar
subwoofer | varchar
deviceID | varchar
它具有第一个表中的所有设备字段,但是这个属性是针对每种设备的特定的...
这个想法是让op有机会创建一个新的属性创造一个新的列,当用户点击添加按钮,在此表中,前缀“DEVICE_ {DEVICE TYPE}”
我可以列出所有字段,当我准备列表时,我的问题是要知道是否有最好的选择来创建这个东西,什么可能是安全和快速的。
想知道:您是否有权更改数据库设计(例如,将设备类型存储在字段中)?从我的观点来看,你所尝试的看起来很难。用手消毒输入可能是一种方法,但我几乎不认为这是建议的做法。 –