第四章 数据库操作

第一节 数据库连接

1、创建连接

数据库连接使用SqlConnection

创建SqlConnection实例:

SqlConnection conn = new SqlConnection();

创建实例后,可用SqlConnection.ConnectionString属性给连接配置连接字符串:

conn.ConnectionString = “<Connection String>”;

2、连接状态

只有在连接打开时才能访问数据库。然而,数据库连接消耗资源,因此应该只在使用数据库时才打开连接,在其他时候应该关闭连接。否则应用程序可能会引起内存泄漏。连接的状态可通过SqlConnection.State属性来判断。该属性包含ConnecState枚举中的一个值。

使用SqlConnection.Open()方法打开连接。使用完连接时,可用SqlConnection.Close()方法关闭它。

第二节 数据库命令

1、创建命令

SqlCommand对象通过SqlConnection对象对数据库执行命令。

2、命令类型

1CommandType.Text:默认类型。指定CommandText属性为SQL命令。

2CommandType.StoreProcedure:该值表示CommandText包含存储过程的名称。

3CommandType.TableDirect:使用该值时,CommandText应该为表或视图的名称。命令执行时,返回指定表中的所有行和所有列。

3、执行命令的方法

可以用于执行命令的方法如下:

1ExecuteNonQuery():命令不返回结果时,使用该方法。该方法适用于InsertUpdateDelete。实际上该方法有一个返回值,其值为int,表示命令影响的行数。

2ExecuteReader():命令返回数据时,使用该方法。这包含大多数的Select命令、表直接命令和很多存储过程。该方法返回一个SqlDataReader类型的对象。

3ExecuteScalar():返回任意类型的结果时,使用该方法。

4ExecuteXmlReader():如果执行的命令返回XML数据,可以使用该方法来获取XmlReader对象以访问数据。这只适用于单行数据,如果命令返回多行,第一行后的所有行都不能通过XmlReader访问。

对于ExecuteReader(),可以指定命令对象要使用的命令行为。为此,可以指定一个或多个CommandBehavior枚举的值。

CommandBehavior.Default:没有影响,结果为默认行为。

CommandBehavior.CloseConnection:使用该行为时,当数据阅读器关闭时连接也将关闭。

CommandBehavior.KeyInfo:该选项意味着更多的信息可以作为查询的一部分获得。如果要使用命令查看表的架构,可以使用该选项。

CommandBehavior.SchemaOnly:使用该选项,只返回架构信息,而不返回真正的数据。该选项常与CommandBehavior.KeyInfo结合使用,获取完整的架构信息。

CommandBehavior.SequentialAccess:确保数据只能以串行方式访问。也就是说必须按数据返回的顺序访问它们。

CommandBehavior.SignalResult:通知SQL提供程序命令只能返回一个结果。

4、参数化命令

执行SQL语句时,完全可以将语句的所有信息包含在命令的CommandText属性中。然而,将SQL语句的某些部分参数化通常很有帮助。这不仅有助于防止SQL注入攻击,也有助于复用命令。

要在SQL语句中使用参数,需要在命令文本提供占位符。占位符是前缀为字符@的变量。例如:

SELECT * FROM MyTable WHERE MyId = @MyId

其中,@MyId表示一个参数。

要使用参数化命令,必须在SqlCommand.Parameters集合中添加相应的参数,该集合是SqlParametersCollection类的一个实例,包含SqlParameter对象。使用SqlParametersCollection.Add()方法添加参数,可以通过传递预配置的参数或指定要添加的参数的属性实现。

配置参数后,可以使用SqlParameter.Value属性来设置它的值。由于SqlParametersCollection.Add()方法返回对添加的参数的引用,因此通常在同一行代码中设置参数的值。

例如:

SqlCommand cmd = new SqlCommand(“SELECT * FROM MyTable WHERE MyId = @MyId”,conn);

cmd.Parameters.Add(“@MyId”,SqlDbType.UniqueIdentifier).Value = MyGuidVal;

使用这种方法时,添加的是输入参数,若要使用输出或双向参数,应独立的实例化参数并配置属性。例如:

SqlParameter myParam = new SqlParameter(“@MyOutputParam”,SqlDbType.Int);

myParam.Direction = ParameterDirection.Output;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值