当我调用ExecuteScalar时,','附近的语法不正确

时间:2019-01-30 10:31:07

标签: c# sql sqlcommand

我有一个问题。我知道有些主题与此问题类似,但是我在这些主题中找不到答案,所以这是我需要的帮助。 我得到了这个查询:

 SqlCommand cmd = new SqlCommand(@"INSERT INTO InterniLozniListS3_Hlavicka(Stredisko, DatumNakladky, SmenaNakladky, HodNakladky, 
                           NaklPredak, CisloLL, SpzVozuTahace, SpzVozuNavesu, Mpz, Mpz2, NaprTlak, TaraNova, Unosnost, PocetNaprav, StaniceUrceni,
                           , PrijemceZbozi, DatNarozeni, JmenoAPrijmeni, Podpis, Vyhotovil, Vysilal, Kod, UvolnenoPrijmeni, UvolnenoTelefon, UvolnenoPlaceno) 
                           OUTPUT INSERTED.ID
                           VALUES
                            (@stredisko, @datumNakladky, @smenaNakladky, @hodNakladky, @naklPredak, @cisloLL, @spzVozuTahace, 
                            @spzVozuNavesu, @mpz, @mpz2, @naprTlak, @taraNova, @unosnost, @pocetNapr, @staniceUrceni,@prijemceZbozi,
                            @datNarozeni, @jmenoAPrijmeni, @Podpis, @Vyhotovil, @Vysilal, @Kod, @uvolnenoPrijmeni, @UvolnenoTelefon, @UvolnenoPlaceno)
                          ;", connection);

我认为我拥有此INSERT权限,但是如果我启动应用程序并对其进行调试,则在这里结束

    return long.Parse(cmd.ExecuteScalar().ToString());

我真的不知道哪里是错误的:/。

2 个答案:

答案 0 :(得分:3)

正如其他人所说,您在一行的末尾和下一行的开头有一个逗号:

StaniceUrceni,
, PrijemceZbozi

因此,您应该始终在开头或结尾使用相同的逗号策略:

string sql = @"
INSERT INTO InterniLozniListS3_Hlavicka(
    Stredisko,  DatumNakladky,  SmenaNakladky, HodNakladky, NaklPredak, 
    CisloLL, SpzVozuTahace, SpzVozuNavesu, Mpz, Mpz2, NaprTlak, TaraNova, 
    Unosnost, PocetNaprav, StaniceUrceni, PrijemceZbozi, DatNarozeni, 
    JmenoAPrijmeni, Podpis, Vyhotovil, Vysilal, Kod, UvolnenoPrijmeni, 
    UvolnenoTelefon, UvolnenoPlaceno) 
OUTPUT INSERTED.ID
VALUES (
    @stredisko, @datumNakladky, @smenaNakladky, @hodNakladky, @naklPredak, 
    @cisloLL, @spzVozuTahace, @spzVozuNavesu, @mpz, @mpz2, @naprTlak, @taraNova,
    @unosnost, @pocetNapr, @staniceUrceni,@prijemceZbozi, @datNarozeni, 
    @jmenoAPrijmeni, @Podpis, @Vyhotovil, @Vysilal, @Kod, @uvolnenoPrijmeni, 
    @UvolnenoTelefon, @UvolnenoPlaceno);"

如您所见,避免水平滚动也很有帮助。

using(var cmd = new SqlCommand(sql, conection))
{
    return (long) cmd.ExecuteScalar();
}

答案 1 :(得分:0)

另一种更好的工作方法。

在Sql数据库引擎中,创建一个存储过程,例如:

//Defining random datatypes to the parameters as i don't know which should be of which DataType.
    create proc sp_InsertUpdate_InterniLozniListS3_Hlavicka
    @stredisko int,
    @datumNakladky varchar(255), 
    @smenaNakladky varchar(255), 
    @hodNakladky varchar(255), 
    @naklPredak varchar(255), 
    @cisloLL varchar(255),
    @spzVozuTahace varchar(255), 
    @spzVozuNavesu varchar(255), 
    @mpz varchar(255), 
    @mpz2 varchar(255), 
    @naprTlak varchar(255), 
    @taraNova varchar(255),
    @unosnost varchar(255), 
    @pocetNapr varchar(255), 
    @staniceUrceni varchar(255),
    @prijemceZbozi varchar(255), 
    @datNarozeni varchar(255), 
    @jmenoAPrijmeni varchar(255), 
    @Podpis varchar(255), 
    @Vyhotovil varchar(255), 
    @Vysilal varchar(255), 
    @Kod varchar(255), 
    @uvolnenoPrijmeni varchar(255), 
    @UvolnenoTelefon varchar(255), 
    @UvolnenoPlaceno  varchar(255)
    as 
    begin
    if(@stredisko == 0) //Assuming this is  Primary key and identity column of the table
    begin
         INSERT INTO InterniLozniListS3_Hlavicka(
        Stredisko,  DatumNakladky,  SmenaNakladky, HodNakladky, NaklPredak, 
        CisloLL, SpzVozuTahace, SpzVozuNavesu, Mpz, Mpz2, NaprTlak, TaraNova, 
        Unosnost, PocetNaprav, StaniceUrceni, PrijemceZbozi, DatNarozeni, 
        JmenoAPrijmeni, Podpis, Vyhotovil, Vysilal, Kod, UvolnenoPrijmeni, 
        UvolnenoTelefon, UvolnenoPlaceno) 
    OUTPUT INSERTED.ID
    VALUES (
        @stredisko, @datumNakladky, @smenaNakladky, @hodNakladky, @naklPredak, 
        @cisloLL, @spzVozuTahace, @spzVozuNavesu, @mpz, @mpz2, @naprTlak, @taraNova,
        @unosnost, @pocetNapr, @staniceUrceni,@prijemceZbozi, @datNarozeni, 
        @jmenoAPrijmeni, @Podpis, @Vyhotovil, @Vysilal, @Kod, @uvolnenoPrijmeni, 
        @UvolnenoTelefon, @UvolnenoPlaceno);"
    end
    else
    begin
        //Update query here
    end
end

然后,用您的C#代码

SqlParameter[] param = new {
       new SqlParameter("@stredisko",ValueHereForThisParam),
       //add rest the required params here
}

SqlConnection oCon = new SqlConnection(ConnectionString);
SqlCommand oCom = new SqlCommand();
oCom.Connection =  oCon;
oCom.CommandType = CommandType.StoredProcedure;
oCom.CommandText = "sp_InsertUpdate_InterniLozniListS3_Hlavicka";
oCom.Parameters.AddRange(param )
oCon.Open();
int i = oCom.ExecuteScalar(); //Will return the added
oCon.Close();