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"));
我为Parametri
和upCmd
创建了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"));
}
答案 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);