瀏覽次數: 627316

  • 如何透過SeverMethod來修改密碼?
    string sql = "update USERS"+ " set PWD = '" + EncryptPassword(param[0].ToString(), "A88888") .Replace("'", "''") + "'" + " where USERID='" + param[0].ToString() + "'";ExecuteCommand(sql, conn, tr);



  • 如何在EEP埋Log, 並可快速查詢Log
    1.找一支Server端程式加入以下Function

            /// <summary>
            /// 寫入EEP LOG
            /// </summary>
            /// <param name="method"></param>
            /// <param name="message"></param>
            public void EEPLog(string method, string message)
            {
                SysEEPLog eeplog = new SysEEPLog(this.GetClientInfo(), SysEEPLog.LogStyleType.UserDefine, SysEEPLog.LogTypeType.Error, DateTime.Now, method, message);
                eeplog.Log();
            }

    2.在需要log的地方,例如server method傳入值,回傳值,自己下SQL語法,呼叫外部API時,用這句即可
    this.EEPLog("模組名稱","訊息");

    範例:
    this.EEPLog(MethodBase.GetCurrentMethod().Name, strSQL);

    3.在EEPNetServer上System Log要打開,並且一定要存到DB,不要存text file

    4.EEPManager就可以直接查詢log,因此比一般log機制,要去作業系統log查看方便








  • 如何實現英文字母以區分大小寫的形式排序?如aa AA bb BB 應排序為 AA BB aa bb?
    方法:
    1. 在SqlServer中,字元類型的欄位元都可以設定定序,更改此欄位的定序為二進位編碼排序,這樣order by field就會按照你說的規則,大寫在上,小寫在下。
    2. 或者...order by ...,ascii(abc),...,但ascii只針對abc之第一位。




  • 可否做到user讀取資料時不能跨廠查詢資料,但對某些User又可以開放。
    這個功能可以使用InfoCommand的安全管理功能,如果你的table有欄位存放廠別這個資料,那只要設定InfoCommand的SiteControl=true,SiteField設為你存放廠別的欄位名稱,比如SiteNO。這樣,你只要在登陸或者網頁開啟的時候,設定CliUtils.fSiteCode=目前廠別,這樣無論怎樣查詢資料,都會自動在查詢資料的Where與劇中自動加入where SiteNO = 目前廠別的語句,另外,如果你想讓某些User例外時,可以在InfoCommand的SecExcept欄位中設定例外的群組部分,這樣隸屬這個群組的User將不受此SiteControl管制。



  • 資料表中有不同廠區的資料在一起,如何依不同的User帳號個別顯示與維護?
    提供2種方法,請參考:
    1.設定Server端InfoCommand的SiteControl為true,並設定SiteFieldName為廠區代號的欄位名稱。這樣,在EEPNetClient登錄的時候,只要去控制這個Login者的廠區代號,就可自動過濾InfoCommand所傳回的資料,如:
    CliUtils.fSiteCode = "A"; // 設定該User的廠區資訊
    在開啟資料的時候,系統會自動下達:
    select * from table where sitefield='A'
    2.第二種方式是利用Menu Utility中的Parameters來控制,就是不同廠區開啟不同的Menu,然后每個menu可以設定Item Parameters參數比如A,這樣,在Form開啟以及查詢的時候,用程式取得 Form.ItemParameters內容去控制InfoDataSet.Setwhere()也可以達到以上的效果。




  • 如何依據不同登入使用者取得不同的資料?
    在EEP的InfoCommand有安全管理功能。要求,資料表要有一個欄位存放資料的擁有者的UserID。
    1. InfoCommand的SecStyle設定為ssByUser
    2. SecFieldName屬性設定為上面所說的欄位名稱,比如CREATE_USER。
    3. SecExcept屬性可以設定為不需受限制的Group的id,比如經理的id,多個id可以分號隔開。
    還有另外一種方法,就是在Client的每次Query資料的時候,都自動加一個條件,比如CREATE_USER=CliUtils.fLoginUser。




  • 請問如何在c#下Sql指令?
    可以通過調用CliUtils.ExecuteSql(string ModuleName, string DataSetName, string sSql, bool IsCursor, string sCurProject)方法來實現。



  • insert 圖片上去oracle blob欄位的時候出現錯誤訊息: ‘ORA-00972: ID 太長’,但實際欄位中並無ID欄位?
    目前在Oracle的圖形欄位並無法使用UpdateComp去存檔,可以用以下方法針對非Sql資料庫:
    1.打開Server的設計畫面,找到UpdateComponent,在FieldAttrs中增加一項,將這個圖形欄位設定其UpdateEnable為False,這樣系統就不會去主動更改這個欄位。
    2.為UpdateComponent增加兩個事件BeforeModify,AfterInsert
    private void ucMaster_AfterInsert(object sender, UpdateComponentAfterInsertEventArgs e)
    {
    ModifyPhoto();
    }

    private void ucMaster_BeforeModify(object sender, UpdateComponentBeforeModifyEventArgs e)
    {
    ModifyPhoto();
    }

    private void ModifyPhoto()
    {
    if (ucMaster.CurrentRow["Photo"] != DBNull.Value)//Photo為blob欄位
    {
    string key = ucMaster.CurrentRow["EmployeeID"].ToString();//Employee為Key欄位
    byte[] photo = (byte[])ucMaster.CurrentRow["Photo"];
    SqlParameter param = new SqlParameter("ph", photo);
    ArrayList list = new ArrayList();
    list.Add(param);
    ExecuteSql(string.Format("Update Employees set Photo = @ph where EmployeeID={0}", key), ucMaster.conn, ucMaster.trans, list);
    }
    }
    若是多key:
    string key1 = ucMaster.CurrentRow["Key1"].ToString();
    string key2 = ucMaster.CurrentRow["Key2"].ToString();
    ExecuteSql(string.Format("Update Employees set Photo = @ph where key1={0}and key2={1}", key1, key2), ucMaster.conn, ucMaster.trans, list);




  • 如何提高Client的效能?
    對於Web和Window的效能部分。
    首先,我們可通過WebDateSet和InfoDataSet的packectRecord來控制Client資料下載的筆數。在MasterDetail設計時,盡可能使用View+Master+Detail的模式設計。
    其次,在Web設計時,我們可以將CatchDataSet設為true。
    在有過多數據交互的邏輯時,請將這些邏輯放在Server上完成,通過ServerMethod來完成。




  • 如何修改Wizard使用的Template?
    首先請程式師了解為EEPWizard所製作的Template有它的特定性,因此在畫面上的所有元件只可增加,不可隨意刪除template中的元件或更改元件的名稱。這裡所說的修改即將Template中的一些屬性進行一些小修改。如:當我們在Win開發時,我們希望在關閉Form時,系統能夠檢查是否在編輯狀態,如果在編輯狀態希望出現提示。那?我們可以將修改對應的InfoBindingSource的CloseProtect設定為true。
    在修改Wizard使用的Template請注意修改的文件所在位置:
    Win Form請修改安裝目錄下的AddIns/ Templates下的Project
    Web Form請修改安裝目錄下的EEPWebClient/ Templates下aspx文件




  • C#語法改寫VB語法,SERVER METHOD範例?
    原文C# ServerMethod
    public object CallTest(object[] objParam)
    {
    string str = objParam[0].ToString();
    string sql= "select avg(UnitPrice) as AvgPrice from [order details] Where ProductID=";
    sql = sql + str;
    DataSet Tmp = ExecuteSql("view", sql, true);
    string retval=Tmp.Tables[0].Rows[0][ "AvgPrice"].ToString();
    Thread.SlEEP(5000);
    object ret;
    ret = new object[] { 0, retval};
    return ret;
    }

    改寫為VB:
    Public Function CallTest(ByVal objParam() As Object) As Object()
    Dim str As String
    str = objParam(0).ToString()
    Dim sql As String
    sql = "select avg(UnitPrice) as AvgPrice from [order details] Where ProductID="
    sql = sql + str
    Dim tmp As DataSet
    tmp = ExecuteSql("view", sql, True)
    Dim retval As String
    retval = tmp.Tables(0).Rows(0)("AvgPrice").ToString()
    System.Threading.Thread.SlEEP(5000)
    Dim ret As Object
    ret = New Object() {0, retval}
    Return ret
    End Function








  • 在EEP2006中,我想獲得專案的名稱和資料庫的名稱
    CliUtils中有很多系統變量可以讀到。大部分以小寫f開頭的都是。
    CliUtils.fLoginDB 資料庫別名
    CliUtils.fCurrentProject 當前solution 





  • 在VS中,Format的格式有哪些類型? 可有文件可參考?
    在VS的系統中,不管是String.Format或是使用到資料格式的地方,都可以用以下的Format格式來處理資料的輸出格式,請參考以下資料:
    {0:format specifier}
    0 是參數索引,它指示列中要格式化的資料元素;因此,通常用零來指示第一個元素。
    format specifier 前面有一個冒號 (:),它由一個或多個字母組成,指示如何格式化資料。可以使用的格式說明符取決於要格式化的資料類型:日期、數位或其他類型。下表顯示了不同資料類型的格式設置運算式的示例。有關格式設置運算式的更多資訊,請參見格式化類型。
    格式設置運算式:
    應用於此資料類型 ,說明
    Price: {0:C}
    numeric/decimal
    顯示“Price:”,後跟以貨幣格式表示的數字。貨幣格式取決於通過 Page 指令或 Web.config 檔中的區域性屬性指定的區域性設置。

    {0:D4}
    integer(不能和小數一起使用。)
    在由零填充的四個字元寬的欄位中顯示整數。

    {0:N2}%
    numeric
    顯示精確到小數點後兩位元的數字,後跟“%”。

    {0:000.0}
    numeric/decimal
    四捨五入到小數點後一位元的數字。不到三位元的數字用零填充。

    {0:D}
    date/datetime
    長日期格式(“Thursday, August 06, 1996”)。日期格式取決於頁或 Web.config 檔的區域性設置。

    {0:d}
    date/datetime
    短日期格式(“12/31/99”)。

    {0:yy-MM-dd}
    date/datetime
    用數字的年-月-日表示的日期(96-08-06)。

    唯讀
    當此列處於編輯模式時,該列中的資料是否顯示在可編輯的控制項中。
    asp.net資料格式的Format—DataFormatString
    我們在呈現資料的時候,不要將未經修飾過的資料呈現給使用者。例如金額一萬元,如果我們直接顯示「10000」,可能會導致使用者看成一千或十萬,造成使用者閱讀資料上的困擾。若我們將一萬元潤飾後輸出為「NT$10,000」,不但讓使比較好閱讀,也會讓使用者減少犯錯的機會。
    下列畫面為潤飾過的結果:
    上述資料除了將DataGrid Web 控制項以顏色來區隔記錄外,最主要將日期、單價以及小計這三個計欄位的資料修飾的更容易閱讀。要修飾欄位的輸出,只要設定欄位的DataFormatString 屬性即可;其使用語法如下:

    DataFormatString="{0:格式字串}"
    我們知道在DataFormatString 中的 {0} 表示資料本身,而在冒號後面的格式字串代表所們希望資料顯示的格式;另外在指定的格式符號後可以指定小數所要顯示的位元數。例如原來的資料為「12.34」,若格式設定為 {0:N1},則輸出為「12.3」。其常用的數值格式如下表所示:
    格式字串 資料 結果
    "{0:C}" 12345.6789 $12,345.68
    "{0:C}" -12345.6789 ($12,345.68)
    "{0:D}" 12345 12345
    "{0:D8}" 12345 00012345
    "{0:E}" 12345.6789 1234568E+004
    "{0:E10}" 12345.6789 1.2345678900E+004
    "{0:F}" 12345.6789 12345.68
    "{0:F0}" 12345.6789 12346
    "{0:G}" 12345.6789 12345.6789
    "{0:G7}" 123456789 1.234568E8
    "{0:N}" 12345.6789 12,345.68
    "{0:N4}" 123456789 123,456,789.0000
    "Total: {0:C}" 12345.6789 Total: $12345.68

    其常用的日期格式如下表所示:
    格式 說明 輸出格式
    d 精簡日期格式 MM/dd/yyyy
    D 詳細日期格式 dddd, MMMM dd, yyyy
    f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm
    F完整日期時間格式(long date + long time) dddd, MMMM dd, yyyy HH:mm:ss
    g 一般格式 (short date + short time) MM/dd/yyyy HH:mm
    G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss
    m,M 月日格式 MMMM dd
    s 適中日期時間格式 yyyy-MM-dd HH:mm:ss
    t 精簡時間格式 HH:mm
    T 詳細時間格式 HH:mm:ss

    string.format格式結果 String.Format
    (C) Currency: . . . . . . . . ($123.00)
    (D) Decimal:. . . . . . . . . -123
    (E) Scientific: . . . . . . . -1.234500E+002
    (F) Fixed point:. . . . . . . -123.45
    (G) General:. . . . . . . . . -123
    (N) Number: . . . . . . . . . -123.00
    (P) Percent:. . . . . . . . . -12,345.00 %
    (R) Round-trip: . . . . . . . -123.45
    (X) Hexadecimal:. . . . . . . FFFFFF85
    (d) Short date: . . . . . . . 6/26/2004
    (D) Long date:. . . . . . . . Saturday, June 26, 2004
    (t) Short time: . . . . . . . 8:11 PM
    (T) Long time:. . . . . . . . 8:11:04 PM
    (f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
    (F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
    (g) General date/short time:. 6/26/2004 8:11 PM
    (G) General date/long time: . 6/26/2004 8:11:04 PM
    (M) Month:. . . . . . . . . . June 26
    (R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
    (s) Sortable: . . . . . . . . 2004-06-26T20:11:04
    (u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
    (U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
    (Y) Year: . . . . . . . . . . June, 2004
    (G) General:. . . . . . . . . Green
    (F) Flags:. . . . . . . . . . Green (flags or integer)
    (D) Decimal number: . . . . . 3
    (X) Hexadecimal:. . . . . . . 00000003








  • 若要自行修改EEP中的某個元件,是否有比較推薦的方式?
    有兩種方法:
    1. 使用partial關鍵字來擴展類。
    2. 使用Inheritance繼承來實現一個新類。
    下面以WebDateTimePicker詳細說明兩種方法的區別:
    ----------------------------------------------------------
    一、代碼實現,同樣都需要新增一個WebDateTimePickerExtend.cs
    1.partial:在新文件中加入
    public partial class WebDateTimePicker
    {
    public void NewFunction(){}
    }
    同時還要修改原WebDateTimePicker.cs中的WebDateTimePicker聲明為public partial class WebDateTimePicker
    2.繼承:在新文件中加入
    public class WebDateTimePickerExtend: WebDateTimePicker
    {
    public void NewFunction(){}
    }
    ----------------------------------------------------------
    二、修改和新增屬性和方法
    1.partial: 可實現新增方法和屬性,但不能修改原有的方法和屬性。
    2.繼承:可實現新增方法和屬性,同時也可以override原有的非私有方法和屬性。
    ----------------------------------------------------------
    三、類的應用
    1.partial:由於類只是被擴展,所以新增的部分還是屬於原類的,這樣WebDateTimePicker就有了新的方法和屬性。
    2.繼承:只有繼承的子類WebDateTimePickerExtend才有新方法和屬性,所以要用的話,要換一個類。

    具體選擇哪種方法要視情況而定:
    (1)使用擴展的方法,可以不變動其他調用此類的原代碼,但是不能更改WebDateTimePicker原有的方法。
    (2)使用繼承的方法,可以變更WebDateTimePicker原有的方法,但其他調用此類的代碼也要相應的修改。








  • 如何取得AD的其他資訊,除了USER和GROUP之外,例如:電話地址等等?
    在Srvtools中的ADClass.cs檔中有個GetADUserFormGroup()方法,可以參照此方法修改。



  • 如何寄發html格式的EMail?
    使用System.Net.Mail.MailMessage而不是System.Web.Mail.MailMessage
    MailMessage
    using System.Net;
    using System.Net.Mail;

    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
    message.From = new MailAddress("toby@infolight.com");
    message.To.Add(new MailAddress("toby@infolight.com.tw"));
    message.Subject = "Test";
    message.Body = "Toby Test123";
    message.IsBodyHtml = true;//設置成html格式

    SmtpClient Client = new SmtpClient("infolight.com", 25);
    Client.EnableSsl = false;
    Client.UseDefaultCredentials = false;
    Client.Credentials = new NetworkCredential("toby", "toby");
    Client.Send(message);








  • 如何下載IIS Server上的文件?
    你可在IIS Server上的檔通過下面的方法使檔進行下載。
    FileInfo file = new FileInfo(filePath);//filePath為你在Server上路徑
    if (file.Exists)
    {
    Response.Clear();
    Response.Buffer = false;
    Response.ContentType = "application/x-msdownload";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.AddHeader("Content-Length", file.Length.ToString());
    Response.Filter.Close();
    Response.WriteFile(file.FullName);
    Response.End();
    }




  • 想從EEP7改用EEP2006開發,請問有什麼好的方式解決從EEP的系統table更新到EEP2006的系統table?
    在EEPNetServer的DB設定中,按“CreateSystemTable”,先選擇"Typical Create",這是為了防止更新後缺少部份Typical的Table而引起不能正常使用EEPManager的功能,之後再選擇"EEP7 migration",這部分是為了針對原EEP系統建立的Table做修正功能。