.net笔记一

dateTable 数据存储到List<Area>集合中,area是个类。
可以用来绑定数据绑定ListBox。
listBox.SelectedItem 是个对象是area这个类。
读取行数据,跳过第一行可以用for循环来避免foreach的判断麻烦。
tab制表符是一个字符\t可以用来对齐处理。
city.Trim('"','[')
导入大数据量时不要用sqlHelper,可以打开一次,导入完全之后在关闭。conn.open();foreanch(){};conn.close()
注意.net学习顺序。
TimeSpan ts=DateTime.Now-StartTime;ts.TotalSeconds总秒数。


实验说明这样做并没有节省很多时间。
程序与数据库的连接。Socket连接。
数据库连接池,ado.net会尽可能的复用连接池中的连接。会把之前的连接存到连接池中,并没有真正的释放,而是存起来了。


怎样缩短时间呢。
使用数据库的批量数据提交。
用类SqlBulkCopy

using( var bulkCopy=new SqlBulkCoky())
{ bulkCopy.DestinationTableName="TT_Num";
bulkCopy.ColumnMappings.Add("Num"."f_NUM")匹配DataTable和数据库的表的列名
bulkCopy.WriteToServer(table)
写入表中。
}


获取DataTable
DateTable table= new DateTable();
table.columns.add("num")加列。
DataRow row =table.newRow();
row["num"]=num;
table.Rows.add(row);


数据库中的可空数据处理。


1+null还是null,null不等于null;
客户端没有输入到数据库中应该是null而不是“”或者0;
string name=txtName.Text;
if(name.lenth<=0){name=null}
但是 new SqlParameter("@name",name)若name为空,那么会报错。
应该是是name=DBNull.Value不能这样赋值。
应该是
object objName=DBNull.value/objName=name;
new SqlParameter("@name",objName)


2014.07.30


读取数据库中null的数据,则返回DBnull.value,要判断后在进行赋值或者转化。int? age=null,是可空类型。
在正式项目中对null处理要谨慎。



三层架构DAL DLL UI,设计模式。
如果列很多,参数就很多,要把参数封装到 MODEL模型中,对于可空列要用int?类型,string本身就可以有null不需要
传null值注意要用object对象做中介处理DBnull.value。
可以提供一种方法
public static ToDBValue(object value){if(value==null) return dbnull.value;else return value}


DAL层返回的应该是个model类,而不是datatable,DataRow等ADO.NET的类。
判断逻辑等最好放在BLL层。
考虑严谨些if(table.rows.count<=0){}else
if(table.Rows.Count>1)(throw new Exception("ID重复"))else
{DataRow row=table.Rows[0];Student student=new Student(),从数据库中取出的值要进行数据类型转换 DateTime?}


三层结构中,model不是一层,它只是数据的存储对象而已。
空值处理FromDbValue()ToDbValue(),这些代码共用的可以写在SqlHelper.cs中。


DRY:Don't Repeat yourself!不要复制代码!
把公共的代码封装到一个方法中可以避免重复性的代码,提高代码复用性。
Private Customer ToCustomer(DataRow row)
{Customer cust=new Customer();
cust.BirthDay=(DateTime?)SqlHelper.FromDbValue(row["Birthday"]);...}


下面直接调用
DataRow row=dt.Rows[0];return ToCustomer(row)即可。


最后做除法更精确。


2014.07.31


<grid><dockPanel><toolBar>
刷新数据用LoadData(),不要复制代码。
XAML是界面层的基础,是不会变的,linq是建立在ado.net上的,是一种语法。
底层还是webservice,remoting,socket.wcf建立在这三个之上的。



数据绑定和代码取值自己适当取舍。


系统规模到一定程度的时候,可能涉及到数据的合并,会造成id的重复等麻烦问题,为此可以用GUID,GUID生成,数据库中NEWID(),.net中用Guid.NewGuid()。guid是个类型。


2014.08.01
开发项目HRMSys
HRMSys.UI,HRMSys.Model,HRMSys.DAL(也是个类库)。
一个解决方案按一般分几个项目:主程序UI,wpf项目(exe程序)。
model项目,是个类库。类前面要加public,需要在其他项目中使用。生成的是程序集。
项目之间调用要引用其他项目。

类前面加public可以其他程序集使用,不加public的是internal的,只能在该程序集内部使用。
修改程序图标,对UI成属性应用程序选项修改。


对DAL层加SQLHelper类,然后需要在DAL层加连接字符串引用。
APP.config加在主程序UI层中。
建数据库。可以存到项目下面。
开发一般为了安全要禁用sa用户。新建用户。(先在根节点的安全性里面建。再到数据库中节点下新建登录名勾选DB_owner,这个用户就只能操作这个数据库。)


问题一定可以解决!先依赖自己。不要轻信系统会有bug。
app.config是要放在UI项目中。DAL层通过ConfigurationManager可以读到项目中的app.config中的配置信息。注意引用关系。
密码不要铭文保存。
不可逆算法MD5(散列算法),拿密码用md5值保存。
用用户输入的密码值也用md5计算,和数据库中的比较。
密码要长一点,避免穷举法
md5值只能碰撞不能反推。

md5加盐处理。对用户输入的密码经过处理后再算md5值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值