如何从不同的输入插入

时间:2013-07-01 11:54:54

标签: c# .net sql database tsql

我正在尝试将不同的values插入到我的数据库的表中,我从不同的tables中检索这些值,从Windows窗体中的textBox输入等。

但我的查询语法不正确,我想知道是否有可能在一个查询中插入这些输入:

     String query4 = @"INSERT INTO FACFIN 
(Nom_pren_RS,trimestre,exercice,Nb_factures,Prix_total_HT) 
    values 
        ('" + textBox1.Text + "','" + textBox3.Text + "','" + textBox2.Text + "', 
    SELECT cast(count(trimestre) AS varchar(6)) AS Nb_factures FROM facture
     WHERE 
    (facture.Nom_pren_RS='" + textBox1.Text + "'),
SELECT cast(SUM (cast(Prix_vente_HT AS BIGINT ))AS varchar(15)) 
from facture 
where (facture.Nom_pren_RS='" + textBox1.Text + "')    )  ";

我知道存在sql注入的风险,我知道我必须使用参数但我只是想测试代码以查看它是否插入,插入的语法可能是错误的

  • nb_factures它应该是varchar(6)所以我投了它

  • Prix_vente_HT中的列facturevarchar,因此我将其投放 到BIGINT执行SUM然后将SUM转换为varchar 因为表格中的Prix_total_HT应为varchar FACFIN

1 个答案:

答案 0 :(得分:2)

您不能将select语句添加到值列表,而是使用select语句保留您的aggrigates但将文本框值带入单个select语句。如果您需要从多个表中提取行,您还可以在选择部分执行UNION。

String query4 = @"INSERT INTO FACFIN (Nom_pren_RS,trimestre,exercice,Nb_factures,Prix_total_HT) 
SELECT '" + textBox1.Text + "','" + textBox3.Text + "','" + textBox2.Text + "', cast(count(trimestre) AS varchar(6)) AS Nb_factures ,
cast(SUM (cast(Prix_vente_HT AS BIGINT ))AS varchar(15)) as Prix_total_HT
FROM facture
WHERE (facture.Nom_pren_RS='" + textBox1.Text + "')";

结果看起来像SQL Server

INSERT INTO FACFIN (Nom_pren_RS,trimestre,exercice,Nb_factures,Prix_total_HT) 
SELECT 
    'TEXT_BOX_1_VALUE','TEXT_BOX_3_VALUE','TEXT_BOX_2_VALUE', 
    cast(count(trimestre) AS varchar(6)) AS Nb_factures, cast(SUM (cast(Prix_vente_HT AS BIGINT ))AS varchar(15)) as Prix_total_HT
FROM facture WHERE (facture.Nom_pren_RS='TEXT_BOX_1_VALUE')