2011-11-25 73 views
0

我的場景是這樣的。我有一個需要更新的電話表(需要更改現有的客戶端)或刪除(如果他們希望刪除現有的電話號碼)或插入(在插入新的否時插入字段爲空)。 我已經有兩個存儲過程添加一個新的電話並更新現有的一個。其參數爲:如何創建一個函數來更新,刪除或動態插入代碼

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)" 

所以我有電話(如陸線/移動),並用它們的ID沿傳真的一部分,如果它們已經在存在DB。

現在我需要創建一個函數,它接受參數並根據傳遞給它的參數決定使用哪個sp。 我完全迷失在這裏。任何關於如何去實現這個功能的幫助都將非常感謝。甚至鏈接到教程將有所幫助! 再次感謝!

P.S 嘗試該功能之前,我做了這樣的事情,但它並不一致

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


} 

和FormView控件的更新命令的SPS。

回答

0

嗨,我所有的工作結束了。認爲這可能幫助初學者和我一樣

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

你不能把這個邏輯加入SP嗎?那麼取決於傳遞給SP的參數,您可以插入還是更新必要的記錄?

我知道您建議您希望在業務邏輯中完成此操作,但由於您似乎並未將ORM用於數據訪問層,因此您可以儘快保持ID(因爲您只需要做一次往返數據庫)並在SP中整理一下?

+0

sp的已經創建好了,我需要使用它們......所以唯一的選擇就是通過一個函數去做! – debutante

相關問題