---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
Ado.net
程序要和数据库交互要通过ADO.net进行,通过ADO.net就能在程序中执行SQL了。ADO.net中提供了对各种不同数据的统一操作接口
直接在项目中内嵌mdf文件的方式使用SQLServer数据库(基于服务的数据库)。Mdf文件随着项目走,用起来方便,和在数据库服务器上创建数据库没什么区别,运行的时候会自动附加(Attach)。
双击mdf文件会在“服务器资源管理器”中打开,管理方式在Management Stdio没有什么本质不同。要拷贝mdf文件需要关闭所有指向mdf文件的连接
正式生产的时候附加到SQLServer上、修改连接字符串即可,除此之外没有任何的区别,在“数据库”节点上右键“附加”;在数据库节点上→ 任务→分离就可以得到可以拷贝的mdf文件
用的时候要在控制台、winfrom项目中在Main函数最开始的位置加入备注中的代码。ASP.项目中不需要。
连接SQLServer
连接字符串:程序通过链接字符串指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户密码等。
项目内嵌mdf文件形式的连接字符串”Data Source=.SQLEXPRESS;AttachDBFilename=|DataDiretory|Database1.mdf;integrated Security=True;User Instance=True”。”.SQLEXPRESS”表示“本机上的SQLEXPRESS实例”,如果数据库实例名不是SQLEXPRESS,则需要修改。“Database1.mdf”为mdf的文件名
ADO.net中通过SqlConnection类创建到SQLServer的练剑,SqlConnection代表一个数据库连接,ADO.net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理。执行备注中的代码如果成功了就OK。
执行简单的Insert语句
SqlCommand表示向服务器提交一个命令(SQL语句等)
CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等)
Using(SqlCommand cmd=conn.CreateCommand())
{cmd.CommandText=”Insert into T_User(UserName.Password) value(‘admin’,’88888’)”;
cmd.ExecuteNonQuery();
}
ExecuteNonQuery返回值是执行的影响行数
常犯错:
String username=’text’;
……..
cmd.CommandText=”Insert into T_User(UserName,Password) values(username,’888888’)”;
执行查询
执行有多行结果集的用ExecuteRead
SqlDataReader reader=cmd.ExecuteReader();
While(reader.Read())
{Console.WriteLine(reader.GetString(1));}
Reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根须列名动态得到序号
ExecuteScalar
SqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定放回值的类型,所以返回值是object类型。
Cmd Commandtext=”select count(*) from T_User”;
Int i=convert ToInt32(cmd.ExcuteScalar());
cmd.CommandText=”select getdate()”;
DateTime dt=convert.ToInt32(cmd.ExcuteSalar());
得到自动增长字段的主键值,在value关键词前加上output inserted.Id,其中Id为主键字段名。执行结果就试插入的主键值,用ExecuteScalar执行最方便。
Cmd CommandText=”Insert into T_User(UserName,Password) ouput inserted.Id value(‘admin’,’88888’)”;
Int i=convert.ToInt32(cmd.ExecuteSalar())
SQL注入攻击
cmd.Parameters.Add(new SqlParameter(“UserName”,username));替换@UserName
查询参数
SQL语句使用@UserName表示“此处用参数代替”,向SqlCommand的Parameters中添加参数
Cmd。CommandText=”select * from T_Users where UserName=@UserName and Password=@Password”;
Cmd.Parameters.Add(newSqlParameter(”UserName”,admin));
cmd.Parameters.Add(new SqlParameter(“Password”,password));
参数在SQLServer内部不是简单地字符串替换,SQlserver直接用添加的值进行数据比较,因此不会有注入漏洞攻击。
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------