這裡傳的只是字符串,當給構造函數傳對象時就編譯出錯。說是需要是常量表達式、typeof表達式、數組創建表達式。
namespace TestAttribute
...{
[AttributeUsage(AttributeTargets.All)]
public class PrimaryKeyAttribute : Attribute
...{
public string mappingName;
public string MappingName
...{
get ...{ return mappingName; }
set ...{ mappingName = value; }
}
public PrimaryKeyAttribute(string mappingName)
...{
this.mappingName = mappingName;
}
}
public class TestAttribute
...{
private string customerID;
private string companyName;
[PrimaryKey("MyCustomerID")]
public string CustomerID
...{
get ...{ return customerID; }
set ...{ customerID = value; }
}
[PrimaryKey("MyCompanyName")]
public string CompanyName
...{
get ...{ return companyName; }
set ...{ companyName = value; }
}
}
public partial class Form1 : Form
...{
public Form1()
...{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
...{
TestAttribute ta = new TestAttribute();
PropertyInfo[] p = ta.GetType().GetPropertIEs();
foreach (PropertyInfo pi in p)
...{
object[] os = pi.GetCustomAttributes(false);
foreach (object o in os)
...{
MessageBox.Show(o.GetType().GetProperty("MappingName").GetValue(o,null).ToString());
}
}
}
}
}
以前做過,長時間不搞就忘了。昨天忽然有了這個需求,花了一天時間終於又搞清楚了方法,在這裡做一個備忘。
首先需要安裝用於存放會話的數據庫,當然,MS在.net Framework中已經提供了現成的工具。在類似於:C:\Windows\Microsoft.Net\Framework\v2.0.50727文件夾下可以找到InstallSqlState.sql 文件,這其實是一個文本文件,裡面存放著用於創建“會話數據庫”的腳本,只需要把它們復制到查詢分析器中,運行就可以了。提示成功後,會在相應的數據庫中生成名稱為ASPState的數據庫。
配置文件做相應的變動:
<sessionState
mode="SQlServer"
stateConnectionString=tpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookIEless="false"
timeout="20"
/> 即將mode由“Inproc”改為“SQLServer”。
我以前安裝的是1.1版本的數據庫,對於.net2.0的程序無法正常使用,需要先刪除舊版的數據庫重新安裝新版就行了。刪除的方法也是采用MS提供的工具,這個工具也可在同樣的文件夾下找到UnInstallSqlState.sql文件,在查詢分析器運行其中的腳本。對於適合.Net的版本,是兼容1.1的。
另外,對於數據庫連接字串,最好采取信任連接。