如何實現英文字母以區分大小寫的形式排序?如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做修正功能。
如何透過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查看方便