是否可以从函数中只调出一行?

时间:2016-03-14 09:07:23

标签: c# postgresql npgsql

NpgsqlCommand upCmd = new NpgsqlCommand("UPDATE Masina SET nosaukums=@nosaukums,svars=@svars,marka=@marka,modelis=@modelis,sedvietas=@sedvietas WHERE ID=@id", ncon);
Parametri(upCmd);

NpgsqlCommand addCmd = new NpgsqlCommand("INSERT INTO Masina (id,nosaukums,svars,marka,modelis,sedvietas) VALUES(@id,@nosaukums,@svars,@marka,@modelis,@sedvietas)", ncon);
Parametri(addCmd);

NpgsqlCommand delCmd = new NpgsqlCommand("DELETE FROM Masina WHERE id=@id", ncon);
delCmd.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "id"));

我为ParametriupCmd创建了addCmd函数,因为它们具有完全相同的行。我也可以为delCmd使用相同的功能吗?是否可以只调用一行进行删除?

Parametri(delCmd, *call only id*);

这样的东西

Parametri()代码:

static void Parametri(NpgsqlCommand cmd)
{
    cmd.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "id"));
    cmd.Parameters.Add(new NpgsqlParameter("@nosaukums", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "nosaukums"));
    cmd.Parameters.Add(new NpgsqlParameter("@svars", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "svars"));
    cmd.Parameters.Add(new NpgsqlParameter("@marka", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "marka"));
    cmd.Parameters.Add(new NpgsqlParameter("@modelis", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "modelis"));
    cmd.Parameters.Add(new NpgsqlParameter("@sedvietas", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "sedvietas"));
}

1 个答案:

答案 0 :(得分:1)

您必须向函数添加一个参数,您可以使用该参数来确定函数是否应添加所有参数,或仅添加ID参数。

类似

static void Parametri(NpgsqlCommand cmd, bool justId)
    {
        cmd.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "id"));
        if(justId){return;}
        cmd.Parameters.Add(new NpgsqlParameter("@nosaukums", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "nosaukums"));
        cmd.Parameters.Add(new NpgsqlParameter("@svars", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "svars"));
        cmd.Parameters.Add(new NpgsqlParameter("@marka", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "marka"));
        cmd.Parameters.Add(new NpgsqlParameter("@modelis", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "modelis"));
        cmd.Parameters.Add(new NpgsqlParameter("@sedvietas", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "sedvietas"));
    }

编辑:

您可以使用可选参数来避免每次调用都必须传入bool:

static void Parametri(NpgsqlCommand cmd, bool justId = false)
    {
        cmd.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "id"));
        if(justId){return;}
        cmd.Parameters.Add(new NpgsqlParameter("@nosaukums", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "nosaukums"));
        cmd.Parameters.Add(new NpgsqlParameter("@svars", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "svars"));
        cmd.Parameters.Add(new NpgsqlParameter("@marka", NpgsqlTypes.NpgsqlDbType.Varchar, 255, "marka"));
        cmd.Parameters.Add(new NpgsqlParameter("@modelis", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "modelis"));
        cmd.Parameters.Add(new NpgsqlParameter("@sedvietas", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "sedvietas"));
    }

然后您可以使用

调用该函数
Parametri(upCmd);
Parametri(addCmd);
Parametri(delCmd, true);