我有三张桌子。在表1中,我有id,name和两列。在另一个表中,我有id,name等。同样是第三个。表的值列在下面
在上图中,列名称esEEE包含相同的值。
另一个表有一个像nameECE这样的列,它们包含相同的值。
我的问题是:
我有文本框控件。当我在文本框中输入eee时,应将值插入到相应的表中,其中列由eee值组成。这可以使用if else
条件完成,但在20个表的情况下如何编写查询
插入查询是这样的:
SqlConnection con = new SqlConnection("Data Source=DESKTOP-CEUQVES;Initial Catalog=register;Integrated Security=True;Pooling=False");
con.Open();
string projid = projectidText.Text;
string videourl = videoText.Text;
string filename = Path.GetFileName(abstractFile.PostedFile.FileName);
abstractFile.SaveAs(Server.MapPath("documents/mini/" + filename));
SqlCommand cmd = new SqlCommand("insert into ece(projectid, video, abstract) values(@id, @video, @abstract)", con);
cmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = projid;
cmd.Parameters.Add("@video", SqlDbType.NVarChar).Value = videourl;
cmd.Parameters.Add("@abstract", SqlDbType.NVarChar).Value = filename;
cmd.ExecuteNonQuery();
con.Close();
通过使用if else可以完成,但代码将是巨大的。
答案 0 :(得分:1)
您可以像这样构建SQL查询:
string commandText = string.Format("INSERT INTO {0} (projectID{0}, video{0}, abstract{0}, values(@id, @video, @abstract)", UserEnteredTableName);
SqlCommand cmd = new SqlCommand(commandText, con);
但你不应该。如果用户将有效的SQL放入他们输入表名的文本框中,它会让您对SQL注入非常开放。
我已经完成了类似的项目,用户在这些项目中创建了字段名称和值,并且我已经成功地将其映射为:
table CustomTables
tableID tableName
------- ---------
1 eee
2 ece
table CustomFields
FieldID tableID rowNumber fieldName fieldValue
------- ------- --------- --------- ----------
1 1 1 projectid 1
2 1 1 name eee
3 1 1 video ssssas
3 1 1 abs xadads
4 1 2 projectid 2
5 1 2 name eee
6 1 2 video jsdksj
7 1 2 abs jdxksk
8 1 3 projectid 4
9 1 3 name eee
10 1 3 video rvrge
11 1 3 abs dtydd
12 2 1 projectid 1
13 2 1 name ece
14 2 1 video werwerwerw
15 2 1 abs etertertf
(您可能不需要“name”字段,如果它只是存储自定义表的名称,因为您将该名称存储在CustomTables表中)
答案 1 :(得分:0)
我建议您将所有表合并为一个。所以不要这样:
table EEE:
projectidEEE nameEEE videoEEE absEEE
------------ ------- -------- ------
1 eee blah gorp
table ECE:
projectidECE nameECE videoECE absECE
------------ ------- -------- ------
1 ece blick blork
您可以添加一个列并组合表格,如下所示:
table ProjectSomething:
projectidECE SomethingId nameECE videoECE absECE
------------ ----------- ------- -------- ------
1 1 eee blah gorp
1 2 ece blick blork
其中SomethingId
1为EEE
且2为ECE
,作为列出20种类型中的每一种的表中的外键。
我怀疑你可以删除nameECE
列,如果它真的有值EEE
和ECE
,那么每个表格中的每一行都是相同的(你的假的不清楚)数据)。如果行不同,那么当然列可以保留,或者如果存在重复但不是全部,则标准化。