根据sql中的列值插入一行

时间:2015-12-18 16:32:09

标签: asp.net sql-server

我有三张桌子。在表1中,我有id,name和两列。在另一个表中,我有id,name等。同样是第三个。表的值列在下面

enter image description here

在上图中,列名称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可以完成,但代码将是巨大的。

2 个答案:

答案 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列,如果它真的有值EEEECE,那么每个表格中的每一行都是相同的(你的假的不清楚)数据)。如果行不同,那么当然列可以保留,或者如果存在重复但不是全部,则标准化。

相关问题