黑马程序员 ADO.NET总结

------- WindowsPhone 7手机开发.Net培训、期待与您交流! -------


ADO.NET技术,提供了对不同数据库的统一操作接口。

一定要熟练手写SQLHelper,部分代码示例:
private static string connStr = ConfigurationManager.ConnectionStrings["DbConnStr"].ConnectionString; //从配置文件中读取数据库连接字符串
public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters); //更简单的写法
return cmd.ExecuteNonQuery(); //返回执行sql语句后的结果
}
}
}

代码分析

Using的作用是 在创建的对象如SqlConnection对象离开uisng的范围后,自动释放资源。

params:一次传入多个参数,但是params修饰的参数要放在最后。


SqlConnection:实现了IDisposable接口的对象,使用完了以后要进行资源释放。
如果对象实现了IDisposable接口,用using包含,离开这个范围后就进行资源的释放。

SqlCommand对象可以向服务器提交一条SQL命令。
int ExecuteNonQuery():插入数据
好习惯:数据表的命名以T开头,如:T_User,这样几乎不会和和关键字冲突。
Object ExecuteScalar():返回查询结果的第一行第一列

close和dispose的区别:
close:关闭连接,之后还可以再打开;
dispose:直接销毁连接,不能再打开使用了。

避免注入漏洞攻击的办法:
参数化查询可以避免SQL注入漏洞。

文件读取:
public static StreamReader OpenText(string path);

数据导入到数据库乱码解决:
设定读取编码为: File.ReadAllLine(path,Encoding.Default)

主键一定要是无意义的!使用逻辑主键,唯一标识一行!

SqlDataReader是连接相关的,它的结果并不是存在本地内存中,而是放在服务器上,一旦连接断开就不能得到结果。
SqlDataReader对于小数据量的数据几乎没有优势,只有麻烦。
DataSet:将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。
DataSet的Tables属性:返回的结果可能有多个表,所以用索引来得到相应的表:DataTable Tables[0]是得到第一个表,以此类推。
DataSet:适合小数据量,大数据量还是要用SqlDataReader
使用SqlCommandBuilder生成SQL语句

数据库连接是非常宝贵的资源,不用时一定要及时释放。

可空数据类型:int? i=null; 为解决c#和数据库对于int是否可以为null的不同所设置的。
判断是否为空: i==null 或者 i.HasValue()
类型转换: 不可空类型赋值给可空类型不需显式转换(一定成功),可空类型赋值给不可空类型需要显式转换(不一定成功)。

使用强类型DataSet一定要设主键。

--------------------------------------------------------------------------------------

----WinForm中存在两个MDF的解决办法----

vs2010中,在项目中点击右键“添加-新建项-基于服务的数据库”,会发现在项目根目录下和\bin\Debug\下都创建了mdf数据库文件。我们需要操作的数据库是项目下的那个,而程序执行时默认操作的是debug下的mdf,我们插入数据也是插入到这里面了。
每次build前,项目下的mdf会复制一份覆盖bin\Debug\下的MDF,所以会发现我们插入数据后找不到数据的情况。
我在测试Insert操作后发现,\Debug\下的mdf总是比项目下的mdf少了一条数据。
解决办法:手动设置程序连接项目下的MDF数据库文件
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")
|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
App.config配置文件中,连接字符串的写法:
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True

参考:
WinForm程序中两个mdf文件问题的解决办法:http://www.rupeng.com/forum/thread-11988-1-1.html
参考:http://weblogs.asp.net/avnerk/archive/2005/12/25/433981.aspx

如何解决由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。 - 已解决 - 搜搜问问http://wenwen.soso.com/z/q15616823.htm

-->省市选择 参考:http://www.programfan.com/blog/article.asp?id=28128


------- WindowsPhone 7手机开发.Net培训、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值