前些天看pet4,虽然大概明白了他的总的架够,可总感觉到不太塌实,今天开始照着pet4自己做的pet4了,还是有点麻烦,刚开始不知道从那里下手,表现层试了,不太理想它和业务有太多的关系了。后来我是从实体层开始,然后是数据层,刚把数据层做完!下面是我自己学到的一些知识!
1 IList 接口
表示可按照索引单独访问的对象的非泛型集合
实例化如下IList<ItemInfo> itemsByProduct = new List<ItemInfo>()
2 Assembly.Load(path).CreateInstance(className);
path指的是一个程序集 className指的是一个类型 只要在bin目录下有path参数指定的程序集,该程序集里面有实现IProduct接口的指定class就行
3 min pool size应该是连接池中最小的连接数
ProviderName 获取或设置 .NET Framework 数据提供程序的名称
.NET Framework 包括下列数据提供程序:
System.Data.SqlClient 提供程序是用于 SQL Server 的默认 .NET Framework 数据提供程序。
System.Data.OleDb 提供程序是用于 OLE DB 的 .NET Framework 数据提供程序。
System.Data.Odbc 提供程序是用于 ODBC 的 .NET Framework 数据提供程序。
System.Data.OracleClient 提供程序是用于 Oracle 的 .NET Framework 数据提供程序
4 CommandType 枚举指定如何解释命令字符串。
StoredProcedure 存储过程的名称。
TableDirect 表的名称。 只有oledb才支持表的类型
Text SQL 文本命令。(默认。)
5 SqlParameter表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射。
无法继承此类。SqlTransaction 表示要在 SQL Server 数据库中处理的 Transact-SQL 事务。无法继承此类。
SqlTransaction.Connection 获取与该事务关联的 SqlConnection 对象,或者如果该事务不再有效,则为 空引用
使用完SqlParameter 要注意引用这个 cmd.Parameters.Clear()清理参数
6 创建一个hashtable
Hashtable parmCache = Hashtable.Synchronized(new Hashtable())
7 ICloneable接口支持克隆,即用与现有实例相同的值创建类的新实例。
只有一个方法 ICloneable.Clone 方法 Object Clone ()
创建作为当前实例副本的新对象。 Clone 既可作为深层副本实现,也可作为浅表副本实现。
在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。
如下这个就可以理解了
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
8 strSQL.Append("@Quantity").Append(i).Append(" WHERE ItemId = @ItemId").Append(i).Append(";")
可以连续追加 利用stringbuider
9 {double i = -100;
i = Math.Sqrt(i);
if (i == double.NaN)
{
Console.Write("输出错误!");
}
else
{
Console.Write(i.ToString());
} }
运行结果是 非数字
帮助文档上的一句话 不可能通过将某个值与另一个等于 NaN 的值进行比较来确定该值是否不是数字。 只有通过使用double.IsNaN(i)来判断它是不是数字
Double.NaN 字段 表示不是数字 (NaN) 的值。此字段为常数。
10 为什么要在实体层加上[Serializable]这个特性描述 实体类有可能会用到Soap这样的协议中去,便于扩充。困惑中??
11 private const string SQL_TAKE_INVENTORY = "UPDATE Inventory SET Qty = Qty - ";
这个后面会把参数补全的SqlParameter[] parms = SqlHelper.GetCachedParameters(SQL_TAKE_INVENTORY + i)
也有个问题 <add name="SQLConnString1" connectionString="server=C73001E3BE974D7;database=MSPetShop4;user id=mspetshop;password=pass@word1;min pool size=4;max pool size=4;"
providerName="System.Data.SqlClient" />
<add name="SQLConnString2" connectionString="server=C73001E3BE974D7;database=MSPetShop4;user id=mspetshop;password=pass@word1;max pool size=4;min pool size=4;"
providerName="System.Data.SqlClient" />
连接字符串这2个是一样的呀?难道是为了在下面区别一下吗?
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
//SQLConnString1 配置文件是加密的.找不到
public static readonly string ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString2"].ConnectionString;