您的位置:首页 > 其它

黑马笔记-ADO.NET基础学习(二)

2011-11-24 21:19 513 查看


---------------------- 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类的属性

1.CommandText

获取或设置要对数据源执行的Transact—SQL语句或存储过程。

2. CommandType

获取或设置一个值,该值指示如何解释CommandText属性。

3.Connection

获取或设置SqlCommand的实例使用的SqlConnection。

4.CommandTimeOut

获取或设置在终止执行命令的尝试并生成错误之前的等待时间。

(2)SqlCommand类的方法

1.ExecuteNonQuery();

它的返回值类型为int型。多用于执行增加,删除,修改数据。返回受影响的行数。

2.ExecuteReader();

它的返回类型为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开始。

3.ExecuteScaler();

它的返回值类型多位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/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: