一、SqlDataReader
SqlConnection conn = new SqlConnection("server=10.126.64.11;user=it_oper;pwd=IT@SME2018;database=MESOtheata;");conn.Open();SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522]", conn);// 或者//或者 SqlCommand cmd=conn.CreateCommand();cmd.CommandText="";SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);//读取完毕自动关闭连接for (int i = 0; i < reader.FieldCount - 1; i++){Console.WriteLine(reader.GetName(i));//获取字段名while (reader.Read())//或者使用reader.HasRows属性判断时候有记录{Console.WriteLine(reader.GetDateTime(0).ToString());//或者 Console.WriteLine(Convert.ToDateTime(reader[0]).ToString());object[] values = new object[reader.FieldCount - 1];reader.GetValues(values);//读取一行所有字段的内容到Values字段中if (reader.IsDBNull(0){//判断某字段是否为null值。
}}
}reader.Close();//系统未关闭时,本Command更改CommandText后或新建Command还有继续使用此连接。
//conn.Close();
二、参数化查询
1、使用SQLClient:
SqlCommand cmd = new SqlCommand("select * from [A_Emp_Dept_20190522] where empname=@empname", conn);SqlParameter para = new SqlParameter("@empname", SqlDbType.NVarChar, 10);para.Value = "曾亮";cmd.Parameters.Add(para);//或者直接 cmd.Parameters.AddWithValue("@empname","曾亮");
2、使用OleDb:
OleDbCommand cmd = new OleDbCommand("select * from [A_Emp_Dept_20190522] where empname like ? and line like ?", conn);cmd.Parameters.AddWithValue("@empname", "曾亮");cmd.Parameters.AddWithValue("@line", "ODMZ%");//参加的参数的顺序应与?号的顺序相同,参数名可随意执行,甚至可以是空串。
三、执行无返回值的查询:cmd.ExecuteNonQuery()
SqlCommand cmd = new SqlCommand("update [A_Emp_Dept_20190522] set dept='aa' where dept='' ", conn);int RecordAffected = cmd.ExecuteNonQuery();if (RecordAffected == 0){Console.Write("操作失败");}
四、执行返回单值的查询:cmd.ExecuteScalar()
SqlCommand cmd = new SqlCommand("select count(*) from [A_Emp_Dept_20190522] ", conn);if (Convert.ToInt32(cmd.ExecuteScalar()) == 0)//无记录,返回null{Console.Write("无记录");}
五、使用Transaction事务
SqlTransaction trans = null;try{trans = conn.BeginTransaction();//默认事务隔离级别为ISolationLevel.Serilizable,Oracle为ISolationLevel.ReadCommited SqlCommand cmd = new SqlCommand("Insert int **", conn);cmd.Transaction = trans;//为命令指定一个事务cmd.ExecuteNonQuery();//可以有多个SqlCommand一并执行,一起提交或回滚trans.Commit();}catch{trans.Rollback();}Transaction事务隔离级别:
六、调用存储过程
SqlCommand cmd = new SqlCommand("GetCustomer", conn);cmd.CommandType = CommandType.StoredProcedure;
SqlParameter para1 = new SqlParameter("@CustomerID", SqlDbType.NChar, 10);para1.Value = "UINET";cmd.Parameters.Add(para1);
SqlParameter para2 = new SqlParameter("@CompanyName", SqlDbType.NVarChar, 30);para2.Direction = ParameterDirection.Output;cmd.Parameters.Add(para2);
cmd.ExecuteNonQuery();Console.WriteLine(cmd.Parameters["@CompanyName"].Value);
七、使用DataReader获取数据库模式信息
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);//仅仅读取模式信息DataTable table = reader.GetSchemaTable();foreach (DataRow row in table.Rows){foreach (DataColumn col in table.Columns){Console.WriteLine(col.ColumnName + row[col.ColumnName]);}}
八、浏览多个结果集
SqlCommand cmd = new SqlCommand("select * from Catogories;select * from Customers", conn);
SqlDataReader reader = cmd.ExecuteReader();//仅仅读取模式信息DataTable table = reader.GetSchemaTable();do//首先自动定位在第一个结果集上{while (reader.Read()){Console.Write(reader[0]);}} while (reader.NextResult());
九、DbDataReader类
从数据源中读取行的只进流,包含SqlDataReader ,OleDbDataReader ,OdbcDataReader ,实现了IDataReader IDataRecord 接口属性
IsClosed 获取一个值,该值指示数据读取器是否已关闭。
FieldCount 获取当前行中的列数。
Item[Int32] 获取位于指定索引处的列。
Item[String] 获取具有指定名称的列。
方法
Close() 关闭 IDataReader 对象。
GetSchemaTable() 返回一个 DataTable,它描述 IDataReader 的列元数据。
NextResult() 在读取一批 SQL 语句的结果时,使数据读取器前进到下一个结果。
Read() 让 IDataReader 前进到下一条记录。
Get***(Int32) 获取指定列的值。
GetValues(Object[]) 使用当前记录的列值填充对象的数组。
IsDBNull(Int32) 返回指定字段是否设置为 null。
到此这篇关于C#SQLCommand命令与DbTransaction事务处理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:C#中SQL Command的基本用法c#中SqlTransaction——事务详解C#事务处理(Execute Transaction)实例解析C#中TransactionScope的使用小结
