您的位置:首页 > 产品设计 > UI/UE

C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar如何使用

2017-05-31 20:39 357 查看
      敲完三层的Login DEMO后,DAL的SQL链接总是有BUG

    总结总结C#链接数据库中ExecuteReader、ExecuteNonQuery、ExecuteScalar使用规范

一.ExecuteNonQuery:执行增,删,改的方法,支持存储过程

/// 连接字符串,自满足,请用SqlHelper.connString赋值
/// 参数1:命令类型,如果是sql语句,则为CommandType.Text,否则为   CommandType.StoredProcdure
/// 参数2:SQL语句或者存储过程名称
/// 参数3:SQL参数,如果没有参数,则为null
/// 返回:受影响的行数
public static int ExecuteNonQuery(CommandType commandType, string cmdText, params SqlParameter[] para)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = commandType;
cmd.CommandText = cmdText;
if (para != null)
{
cmd.Parameters.AddRange(para);
}
conn.Open();
return Convert.ToInt32(cmd.ExecuteNonQuery());
}
}


注:1、ExecuteNonQuery()执行命令对象的SQL语句,返回一个int
类型的变量,返回数据库操作之后影响的行数。适合用来验证对数据库进行增删改的情况。
        2、ExecuteScalar()也返回一个int型变量。如果SQL语句是Select查询,则仅仅返回查询结果集中第一行第一列,而忽略其他行和列。如果SQL语句不是Select查询,则这个返回结果没任何作用。(建议查询数据库时使用)。由于不知道SQL语句到底是什么样的结构(有可能是int,有可能是Char等其它,)所以ExecuteScalar()方法返回一个最基本的类型Object,这个类型是所有类型的基类,可以转换为任意类型,所以用前需强制转换。

二、ExecuteScalar:执行查询的方法,支持存储过程
       /// 参数1:命令类型,如果是sql语句,则为CommandType.Text,否则为   CommandType.StoredProcdure

    /// 参数2:SQL语句或者存储过程名称

    /// 参数3:SQL参数,如果没有参数,则为null 

    /// 返回:查询结果的第一行第一列

public static object GetScalar(CommandType commandType, string cmdText, params SqlParameter[] para)  

    {  

        object result = null;  

        using (SqlConnection conn = new SqlConnection(connectionString))  

        {  

            SqlCommand cmd = new SqlCommand();  

            cmd.Connection = conn;  

            cmd.CommandType = commandType;  

            cmd.CommandText = cmdText;  

            if (para != null)  

            {  

                cmd.Parameters.AddRange(para);  

            }  

            conn.Open();  

            result = cmd.ExecuteScalar();  

        }  

        return result;  

    }  

}  

三、ExecuteReader:执行查询的方法,支持存储过程      
/// 参数1:命令类型,如果是sql语句,则为CommandType.Text,否则为   CommandType.StoredProcdure    

/// 参数2:SQL语句或者存储过程名称    

/// 参数3:SQL参数,如果没有参数,则为null    

 /// 返回:读取器SqlDataReader

public static SqlDataReader ExecuteReader(CommandType commandType, string cmdText, params SqlParameter[] para)
{
SqlConnection conn = new SqlConnection(connectionString);
SqlDataReader dr = null;
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = commandType;
cmd.CommandText = cmdText;
if (para != null)
{
cmd.Parameters.AddRange(para);
}
conn.Open();
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
四、GetDataSet:执行查询的方法,支持存储过程    

  /// 参数1:命令类型,如果是sql语句,则为CommandType.Text,否则为CommandType.StoredProcdure 
  

 /// 参数2:SQL语句或者存储过程名称   

 /// 参数3:SQL参数,如果没有参数,则为null     

 /// 返回:数据集

[html] view
plain copy

public static DataSet GetDataSet(CommandType commandType, string cmdText, params SqlParameter[] para)  

{  

    using (SqlConnection conn = new SqlConnection(connectionString))  

    {  

        SqlDataAdapter da = new SqlDataAdapter();  

        da.SelectCommand = new SqlCommand();  

        da.SelectCommand.Connection = conn;  

        da.SelectCommand.CommandText = cmdText;  

        da.SelectCommand.CommandType = commandType;  

        if (para != null)  

        {  

            da.SelectCommand.Parameters.AddRange(para);  

        }  

        DataSet  ds = new DataSet();  

        conn.Open();  

        da.Fill(ds);  

        return ds;  

    }  

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