2016-03-14 3 views
0
NpgsqlCommand upCmd = new NpgsqlCommand("UPDATE Masina SET [email protected],[email protected],[email protected],[email protected],[email protected] WHERE [email protected]", 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 [email protected]", ncon); 
delCmd.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "id")); 

Я сделал функцию Parametri для upCmd и addCmd, потому что они имеют точно такие же линии. Могу ли я использовать ту же функцию для delCmd? Можно ли вызывать только одну строку для удаления?Можно ли вызывать только одну линию из функции?

Что-то вроде Parametri(delCmd, *call only id*);

Список параметров (код):

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

Вы бы добавить параметров в функцию, которую вы могли бы использовать, чтобы определить, является ли функция должна добавить все параметры, или просто параметр 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")); 
    } 

EDIT:

Вы можете использовать дополнительный параметр, чтобы избежать необходимости передать логическое значение в течение каждого вызова:

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); 
+0

Parametri (upCmd, false); Parametri (addCmd, false); Parametri (delCmd, true); Должен ли я написать это так, чтобы позвонить всем им сейчас? –

+0

Да, это должно сделать это. – Jay

+0

@ RobertsŠensters добавляет редактирование, которое заставляет вас отказаться от необходимости передавать false в ваших командах добавления и обновления. – Jay