Как создать функцию для динамического обновления, удаления или вставки в код позади - PullRequest
0 голосов
/ 25 ноября 2011

Мой сценарий такой.У меня есть телефонный стол, который необходимо обновить (если ему нужно изменить существующий для клиента) или удалить (если он хочет удалить существующий номер) или вставить (если поле пусто, но новое не вставлено).У меня уже есть две хранимые процедуры, которые добавляют новый телефон и обновляет существующий.параметры которого:

 EXECUTE @RC = [CUSTOMER_test].[dbo].[uspAddClientTel] 
   @ClientID
  ,@TelNo
  ,@TelTypeID
  ,@DetailsTypeID
  ,@SortNo
  ,@ResultTelID OUTPUT 

EXECUTE @RC = [CUSTOMER_test].[dbo].[uspUpdateClientTel] 
   @TelID
  ,@TelNo
  ,@TelTypeID
  ,@DetailsTypeID
  ,@SortNo
  ,@ResultTelID OUTPUT
GO

часть запроса в представлении формы

  (SELECT TOP 1 F.tel_no FROM TELEPHONE as F where F.tel_type_id = 3 AND F.client_id = @id ORDER BY sort_no ) AS fax, 
(SELECT TOP 1 T.tel_no from TELEPHONE as T where T.tel_type_id = 1 OR T.tel_type_id = 2 AND T.client_id = @id ORDER BY sort_no) AS telephone, 
(SELECT TOP 1 F.tel_id FROM TELEPHONE as F where F.tel_type_id = 3 AND F.client_id = @id ORDER BY sort_no ) AS faxid , 
(SELECT TOP 1 T.tel_id from TELEPHONE as T where T.tel_type_id = 1 OR T.tel_type_id = 2 AND T.client_id = @id ORDER BY sort_no) AS telephoneid ,
CLIENT_ADDRESS.client_address_id

  FROM ORGANIZATION AS O INNER JOIN CLIENT ON O.client_id = CLIENT.client_id
    LEFT OUTER JOIN CLIENT_ADDRESS ON  CLIENT.client_id = CLIENT_ADDRESS.client_id
 WHERE (CLIENT.client_id = @id)"

, поэтому у меня есть телефон (как стационарный / мобильный) и факс вместе с их идентификаторами, еслиони уже существуют в БД.

Теперь мне нужно создать функцию, которая принимает аргументы и тем самым решает, какой sp использовать в зависимости от переданных ей аргументов.Я полностью потерян здесь.Любая помощь о том, как выполнить эту функцию, будет высоко ценится.даже ссылки на учебники помогут!Еще раз спасибо!

ps, прежде чем пытаться использовать функцию, я сделал что-то подобное, но это не соответствует

protected void FrmClient_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
    string TelTypeID;
    string ResultTelID1 = "";

    int intClientID = (int)e.Keys[0];
    string strTelID = (string)e.OldValues["telephoneid"];
    string strFaxID = (string)e.OldValues["faxid"];


     SqlConnection conTel = new SqlConnection();
    conTel.ConnectionString = Convert.ToString(ConfigurationManager.ConnectionStrings["CUSTOMERConnectionString"]);
    conTel.Open();

    if (strTelID != "")
    {
        string strtelcmd = ("SELECT tel_type_id, details_type_id, sort_no from TELEPHONE where tel_id =" + strTelID);
        SqlCommand telcmd = new SqlCommand(strtelcmd, conTel);
        SqlDataReader rdrTel = telcmd.ExecuteReader();
        while (rdrTel.Read())
        {

            sdsClient.UpdateParameters["TelTypeID"].DefaultValue = rdrTel["tel_type_id"].ToString();
            sdsClient.UpdateParameters["DetailsTypeID"].DefaultValue = rdrTel["details_type_id"].ToString();
            sdsClient.UpdateParameters["SortNo"].DefaultValue = rdrTel["sort_no"].ToString();

        }
        rdrTel.Close();

    }


    else   if (strFaxID != "")
    {
        string strfaxcmd = ("SELECT tel_type_id, details_type_id, sort_no from TELEPHONE where tel_id ="+ strFaxID);
        SqlCommand faxcmd = new SqlCommand(strfaxcmd, conTel);
        SqlDataReader rdrfax = faxcmd.ExecuteReader();
        while (rdrfax.Read())
        {
            sdsClient.UpdateParameters["TelTypeID1"].DefaultValue = rdrfax["tel_type_id"].ToString();
            sdsClient.UpdateParameters["DetailsTypeID1"].DefaultValue = rdrfax["details_type_id"].ToString();
            sdsClient.UpdateParameters["SortNo1"].DefaultValue = rdrfax["sort_no"].ToString();
        }

        rdrfax.Close();

    }
    else if (strTelID == "")
    {

        SqlCommand cmdaddTel = new SqlCommand("uspAddClientTel",conTel);
        cmdaddTel.CommandType = CommandType.StoredProcedure;

        string strNewTel = (string)e.NewValues["telephone"]; 


        if (strNewTel.Trim().StartsWith("06") || strNewTel.Trim().StartsWith("07") )

            TelTypeID = "2";
        else
            TelTypeID = "1";


        cmdaddTel.Parameters.Add(new SqlParameter("@ClientID", intClientID));
        cmdaddTel.Parameters.Add(new SqlParameter("@TelNo",strNewTel ));
        cmdaddTel.Parameters.Add(new SqlParameter("@TelTypeID", TelTypeID));
        cmdaddTel.Parameters.Add(new SqlParameter("@DetailsTypeID", 1));
        cmdaddTel.Parameters.Add(new SqlParameter("@SortNo1", 1 ));
        cmdaddTel.Parameters.Add(new SqlParameter("@ResultTelID1", ResultTelID1));

        SqlDataReader rdrAddFax = cmdaddTel.ExecuteReader();

    }

    else if (strFaxID == "")
    {

        SqlCommand cmdaddFax = new SqlCommand("uspAddClientTel", conTel);
        cmdaddFax.CommandType = CommandType.StoredProcedure;

        string strNewFax = (string)e.NewValues["fax"];



        cmdaddFax.Parameters.Add(new SqlParameter("@ClientID", intClientID));
        cmdaddFax.Parameters.Add(new SqlParameter("@TelNo", strNewFax));
        cmdaddFax.Parameters.Add(new SqlParameter("@TelTypeID", 3));
        cmdaddFax.Parameters.Add(new SqlParameter("@DetailsTypeID", 2));
        cmdaddFax.Parameters.Add(new SqlParameter("@SortNo1", 1));
        cmdaddFax.Parameters.Add(new SqlParameter("@ResultTelID1", ResultTelID1));

        SqlDataReader rdrAddFax = cmdaddFax.ExecuteReader();
    }


    conTel.Close();


}

и sps в команде update формы вида.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2011

Привет все, я работал в конце. думал, что это может помочь новичку, как я

  public void functUAD(int intClientID, string TelType, int TelID, string OldTelNumber, string NewTelNumber)
    {
        int ResultTelID = 0 ;
        int TelTypeID ;
        int Result= 0 ;


        SqlConnection conTel = new SqlConnection();
        conTel.ConnectionString = Convert.ToString(ConfigurationManager.ConnectionStrings["CUSTOMERConnectionString"]);
        conTel.Open();

        if (TelType.ToLower() == "fax")

            TelTypeID = 3;

        else if (NewTelNumber.Trim().StartsWith("06") || NewTelNumber.Trim().StartsWith("07"))

            TelTypeID = 2;
        else
            TelTypeID = 1;



       if (OldTelNumber != "" && NewTelNumber != "" )    //update old number with new number
        {


            SqlCommand cmdUpdateTel = new SqlCommand("uspUpdateClientTel", conTel);
            cmdUpdateTel.CommandType = CommandType.StoredProcedure;

            SqlCommand cmdSortNo = new SqlCommand("SELECT sort_no FROM TELEPHONE WHERE tel_id= " + TelID, conTel);
            string SortNo = (string)cmdSortNo.ExecuteScalar();


            cmdUpdateTel.Parameters.Add(new SqlParameter("@TelID", TelID));
            cmdUpdateTel.Parameters.Add(new SqlParameter("@TelNo", NewTelNumber));
            cmdUpdateTel.Parameters.Add(new SqlParameter("@TelTypeID", TelTypeID));
            cmdUpdateTel.Parameters.Add(new SqlParameter("@DetailsTypeID", 1));
            cmdUpdateTel.Parameters.Add(new SqlParameter("@SortNo", SortNo));
            cmdUpdateTel.Parameters.Add(new SqlParameter("@ResultTelID", ResultTelID));

            cmdUpdateTel.ExecuteNonQuery();

        }

        if (OldTelNumber == "" && NewTelNumber != "")   // add a newnumber
        {

            int SortNo = 0 ;
            SqlCommand cmdaddTel = new SqlCommand("uspAddClientTel", conTel);
            cmdaddTel.CommandType = CommandType.StoredProcedure;


            if (TelTypeID == 1)
                SortNo = 1;
            else
            {
                SqlCommand cmdSortNo = new SqlCommand("SELECT MAX(sort_no) from TELEPHONE where tel_id =" + TelID, conTel);
                int MaxSort = (int)cmdSortNo.ExecuteScalar();
                SortNo += MaxSort;
            }
            cmdaddTel.Parameters.Add(new SqlParameter("@ClientID", intClientID));
            cmdaddTel.Parameters.Add(new SqlParameter("@TelNo", NewTelNumber));
            cmdaddTel.Parameters.Add(new SqlParameter("@TelTypeID", TelTypeID));
            cmdaddTel.Parameters.Add(new SqlParameter("@DetailsTypeID", 1));
            cmdaddTel.Parameters.Add(new SqlParameter("@SortNo", SortNo ));
            cmdaddTel.Parameters.Add(new SqlParameter("@ResultTelID", ResultTelID));

            cmdaddTel.ExecuteNonQuery();

        }

        if (OldTelNumber != "" && NewTelNumber == "") // delete the old number
        {

            SqlCommand cmdDelete = new SqlCommand("RemoveClientTel", conTel);
            cmdDelete.Parameters.Add(new SqlParameter("@TelID",TelID));
            cmdDelete.Parameters.Add(new SqlParameter("@Result", Result));
            cmdDelete.ExecuteNonQuery();
        }
}

и тогда вы можете вызвать функцию с соответствующими параметрами! До свидания!

0 голосов
/ 25 ноября 2011

Не могли бы вы включить эту логику в SP?Таким образом, в зависимости от параметров, переданных в SP, вы либо вставляете, либо обновляете необходимые записи?

Я знаю, что вы предлагаете, чтобы это было сделано в бизнес-логике, но поскольку вы, кажется, не используетеORM для вашего уровня доступа к данным вы также можете сохранять идентификатор быстро (так как вам нужно будет всего лишь совершить одну поездку в БД) и привести в порядок в SP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...