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

Incorrect syntax near ',' when i call ExecuteScalar

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

 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());

真不知道哪里错了:/.

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

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();
}

另一种更好的工作方法。

在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();