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

---------------------- 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/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值