---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
今天不仅要继续学习ADO.NET还得要整理前几天的学习笔记了……..
连接字符串
连接字符串:程序通过接字符串指定要连哪台服务器上的哪个实例的哪个数据库,用什么用户名和密码等。
(1)本地连接
stringsource = @" server = .kingsql;database = Mydb; integrated security=SSPI";
stringsource = @" server = .kingsql;database = Mydb; uid = sa; pwd = sa ";
(2)远程连接
首先要保证客户端与SQL服务器连接。
(3)项目内嵌MDF文件形式的连接字符串
DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Mydb.mdf;IntegratedSecurity=True;User Instance=True"
SqlConnectionconn = newSqlConnection("Server=.;DataBase=Northwind;Uid=sa;pwd=123;");
DataSourceServer=.;目标服务器IP本地用.(Local);
DataBase 数据库名称;
Uid ,UserID , 连接数据库的用户名;
pwdPassword 是连接数据库的密码;
ADO.NET中通过SqlConnection类创建到SQLSERVER的连接,sqlconnection代表一个数据库连接,ADO.NET中的连接,ADO.NET中的连接等资源实现了IDisposble接口,可以使用Using进行资源管理。
IDisposble:(见什么学什么,好好利用这次学习时间。)
C#中资源的释放是通过手工调用IDisposable.Dispose方法来进行的,更有using语句可以帮助用户及时调用Dispose方法,这在存在异常抛出的情况下非常有用。
MSDN对IDisposable接口的解释为:定义一种释放分配的资源的方法。
1) 此接口的主要用途是释放非托管资源。
2) 当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。
3) 但无法预测进行垃圾回收的时间。
4) 另外,垃圾回收器对窗口句柄或打开的文件和流等非托管资源一无所知。将此接口的 Dispose 方法与垃圾回收器一起使用来显式释放非托管资源。
5) 当不再需要对象时,对象的使用者可以调用此方法。
using语句
using语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
(1)可以在using 语句之前声明对象。
Fontfont2 = new Font("Arial", 10.0f);
using (font2)
{
// use font2
}
(2)可以在using 语句之中声明对象。
using(Font font2 = new Font("Arial", 10.0f))
{
// use font2
}
using关键字有什么用?什么是IDisposable?
using 可以声明namespace 的引入,还可以实现非托管资源的释放,实现了IDisposiable 的类在using 中创建,
using 结束后会自动调用该对象的Dispose 方法,释放资源。加分的补充回答:using 其实等价于try……finally,
用起来更方便。
(3)可以有多个对象与 using 语句一起使用,但是必须在 using 语句内部声明这些对象。
using(Font font3=new Font("Arial",10.0f), font4=newFont("Arial",10.0f))
{
// Use font3 and font4.
}
可能遇到的错误:
1) 由于启动用户案例的进程时出错,导致无法生成SQLSERVER的用户实例。http://wenwen.soso.com/z/q15616823.htm
2) 版本太低,只支持2005及以下数据库解决安装VS2008SP1
3) 启动超时,多试几次。
如果SQl语句所查询的表是关键字 怎么解决
加上[ ]
例如select *from [user],另外如果字段是关键字,也可以这么写
T_USER
Sqlcommand
表示要对 SQLServer 数据库执行的一个 Transact-SQL 语句或存储过程。无法继承此类。
(1)SqlCommand类的属性
获取或设置要对数据源执行的Transact—SQL语句或存储过程。
获取或设置一个值,该值指示如何解释CommandText属性。
获取或设置SqlCommand的实例使用的SqlConnection。
获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
(2)SqlCommand类的方法
它的返回值类型为int型。多用于执行增加,删除,修改数据。返回受影响的行数。
它的返回类型为SqlDataReader。此方法用于用户进行的查询操作。使用SqlDataReader对象的Read();方法进行逐行读取。
例如:
SqlCommand comm =new SqlCommand("select * from CGSZ wherecid="+id,conn);
SqlDataReader reder=comm.ExecuteReader();
while(reder.Read())
{
//读出内容列
stringstr=reder["cname"].ToString();
//读取分类列
stringstr1=reder["ckind"].ToString();
//分别为文本框加载数据
this.txtContent.Text = str;
this.txtClass.Text = str1;
}
其中的读取数据列的时候。除了使用reder["列名"].ToString();还可以使用reder[索引].ToSting();
注意:这里的索引指的是数据库中列的索引。从0开始。
它的返回值类型多位int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
Sqlcommand的ExecuteScaler()方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是Object。
Output insertedid
insert into T_Person
(id,name)
OUTPUT inserted.id
VALUES(21,'qiaoke')
Conn.open(),conn.close(),conn.dispose()
Close:关闭还可以能打开。
Dispose:直接销毁,不能再次使用。
Using 在作用域以后调用Dispose.
SqlConnection,FileStream等的Dispose内部都会做这样的判断,判断有没有CLOSE;如果没有close就先CLOSE,在DISPOSE
注入漏洞与参数化查询。
Console.WriteLine("请输入用户名:");
string username = Console.ReadLine();
Console.WriteLine("请输入密码:");
//密码
string password = Console.ReadLine();
using (//SQL连接
SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;AttachDBFilename=E:\学习\C#练习\for\ConsoleApplication2\ConsoleApplication2\Database1.mdf;integrated security=True;user instance=true")
)
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())//实行语句
{
cmd.CommandText = "select count(*) from T_Users where username='" + username + "'";
int i = Convert.ToInt32(cmd.ExecuteScalar());
if (i > 0)
{
cmd.CommandText = "select count(*) from T_Users where password='" + password + "'";
int j = Convert.ToInt32(cmd.ExecuteScalar());
if (j > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("密码错误!");
}
}
else
{
Console.WriteLine("没有该用户!");
}
}
}
Console.ReadKey();
解决方法:
cmd.CommandText = "select * from T_Users where UserName=@dbUserName";
cmd.Parameters.Add(newSqlParameter("dbUserName",txtBxUserName.Text))
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/