(四)数据库命令(SQL Server) ——以编程方式访问数据库
1、 创建命令
SqlCommand对象有4个构造函数:
1) SqlCommand cmd = new SqlCommand();
2) SqlCommand cmd = new SqlCommand(“<command string>”);
3) SqlCommand cmd = new SqlCommand(“<command string>”,<connection string>);
4) SqlCommand cmd = new SqlCommand(“<command string>”,<connection string>,
<transaction>);
2、 CommandText命令类型
命令类型 | 说明 |
CommandType.Text | 默认值;指定CommandText属性为SQL命令。该命令可能是参数化的。 |
CommandType.TableDirect | CommandText应为表或视图的名称。返回指定的表中的所有行和列。 |
CommandType.StoredProcedure | 表示CommandText包含存储过程的名称。 |
3、 执行命令的方法
命令 | 说明 |
DbCommand. ExecuteNonQuery() | 命令不返回结果,适用于Insert,Update和Delete命令。事实上命令返回一个表示命令影响行数的int类型的返回值。 |
DbCommand. ExecuteScalar() | 返回任意类型的结果,类型是object。不适合返回行数据的Select命令,如果查询实际上返回行数据,该方法将返回第一行的第一列。 |
DbCommand .ExecuteReader() | 命令返回行,返回值是SqlDataReader对象。适用于大多数Select、表直接(tabledirect)命令和很多存储过程。 |
SqlCommand. ExecuteXmlReader() | 返回XML数据。(注:SQL Server的DbCommand版本名为SqlCommand,它有自己的一些特殊的方法,如ExecuteXmlReader()) |
4、 参数化命令
有助于防止SQL 注入攻击,也有助于重用命令。另外,对于使用参数的存储过程,必需采用这种技术,因为使用命令类型StoredProcedure时,这些参数不能包含在命令文本中。
要在SQL语句中使用参数,需要提供占符(变量),它的前缀为字符@。配置参数后,就可以使用SqlParemeter.Value属性来设置它的值。由于SqpParametersCollection.Add()方法返回对添加的参数的引用,因此通常在同一行代码中设置参数的值。
使用输入参数的例子:
SqlCommand cmd = new SqlCommand (“SELECT * FROM myTable WHERE MyID=@MyIDIn”,conn);
cmd.Parameters.Add(“@MyIDIn”,SqlDbType.UniqueIdentifier).Value=MyGuidVar;
使用输出参数(或双向)参数的例子:(此时应独立地实例化参数)
SqlParameter myParam = new SqlParameter(“@myOutputParam”,SqlDbType.Int);
myParam.Direction = ParameterDirection.Output;
…
默认方向是ParameterDirection.Input,也可以用ParameterDirection.InputOutput指定双向参数,用ParameterDirection.ReturnValue指定输出参数(如果参数是存储过程的返回值)。