SQL Server 帮助类及使用方式
帮助类 方法
//数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现. public static readonly string connectionString = ConfigurationManager.AppSettings["connStr"].ToString(); public SqlDBHelper() { } #region Dapper 操作方法 /// <summary> /// 执行sql 增删改。 /// 示例: /// sql:Insert into Users values (@UserName, @Email, @Address) /// model:new Users(){Email = "123456qq.com",Address = "广州",UserName = "AAA" } /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="t"></param> /// <returns></returns> public static int Execute<T>(string sql, T t) { using (var connection = new SqlConnection(connectionString)) { int res = connection.Execute(sql, t); return res; } } /// <summary> /// 执行sql 增删改 批量。 /// 示例: /// sql:Insert into Users values (@UserName, @Email, @Address) /// model:List<Users> usersList = new List<Users>() { new Users(){Email = "123456qq.com",Address = "广州",UserName = "AAA" } } /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="list"></param> /// <returns></returns> public static int ExecuteBatch<T>(string sql, List<T> list) { using (var connection = new SqlConnection(connectionString)) { int res = connection.Execute(sql, list); return res; } } /// <summary> /// 执行sql 查询 返回一个结果集 /// 示例: /// sql:select * from Users where UserName=@UserName /// obj:new { UserName = "jack" } /// 多个示例: /// sql:select * from Users where UserID in @Ids /// obj:new { Ids = new int[2] { 5, 6 } } /// /// var args = new DynamicParameters(new { guidList }); /// List<ProductAssistantTab> list = DataAccessLayer.SqlDBHelper.Query<ProductAssistantTab>(strSql.ToString(), args); /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="obj"></param> /// <returns></returns> public static List<T> Query<T>(string sql, DynamicParameters obj) { using (var connection = new SqlConnection(connectionString)) { var query = connection.Query<T>(sql, obj); return query.ToList(); } } /// <summary> /// 查询第一行 /// 示例: /// sql:select * from Users where UserName=@UserName /// obj:new { UserName = "jack" } /// 多个示例: /// sql:select * from Users where UserID in @Ids /// obj:new { Ids = new int[2] { 5, 6 } } /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="obj"></param> /// <returns></returns> public static T QueryFirstOrDefault<T>(string sql, DynamicParameters obj) { using (var connection = new SqlConnection(connectionString)) { var query = connection.QueryFirstOrDefault<T>(sql, obj); return query; } } #endregion =============================== #region 存储过程操作 /// <summary> /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlDataReader</returns> public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) { SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); return returnReader; } /// <summary> /// 执行存储过程 /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <param name="tableName">DataSet结果中的表名</param> /// <returns>DataSet</returns> public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) { using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } } public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times) { using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.SelectCommand.CommandTimeout = Times; sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } } /// <summary> /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// </summary> /// <param name="connection">数据库连接</param> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand</returns> private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { if (parameter != null) { // 检查未分配值的输出参数,将其分配以DBNull.Value. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } command.Parameters.Add(parameter); } } return command; } /// <summary> /// 执行存储过程,返回影响的行数 /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <param name="rowsAffected">影响的行数</param> /// <returns></returns> public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected) { using (SqlConnection connection = new SqlConnection(connectionString)) { int result; connection.Open(); SqlCommand command = BuildIntCommand(connection, storedProcName, parameters); rowsAffected = command.ExecuteNonQuery(); result = (int)command.Parameters["ReturnValue"].Value; //Connection.Close(); return result; } } /// <summary> /// 创建 SqlCommand 对象实例(用来返回一个整数值) /// </summary> /// <param name="storedProcName">存储过程名</param> /// <param name="parameters">存储过程参数</param> /// <returns>SqlCommand 对象实例</returns> private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); return command; } #endregion
插入示例:包含单个插入及批量插入
/// <summary> /// 单条新增IOS数据 /// </summary> /// <param name="tab"></param> public void AddIOSDataInfo(IosDataTab tab) { StringBuilder strSql = new StringBuilder(); strSql.Append(" insert into ios_data_tab(ios_guid,plat_id,analog_dess_model,analog_model,scanbody_dess_model,scanbody_model,create_time) "); strSql.Append(" values(@ios_guid,@plat_id,@analog_dess_model,@analog_model,@scanbody_dess_model,@scanbody_model,GETDATE()) "); DataAccessLayer.SqlDBHelper.Execute(strSql.ToString(), new { ios_guid = tab.ios_guid, plat_id =tab.plat_id, analog_dess_model = tab.analog_dess_model, analog_model = tab.analog_model, scanbody_dess_model = tab.scanbody_dess_model, scanbody_model = tab.scanbody_model }); } /// <summary> /// 批量插入 /// </summary> /// <param name="tab"></param> public void AddIOSDataInfo(List<IosDataTab> tab) { StringBuilder strSql = new StringBuilder(); strSql.Append(" insert into ios_data_tab(ios_guid,plat_id,analog_dess_model,analog_model,scanbody_dess_model,scanbody_model,create_time) "); strSql.Append(" values(@ios_guid,@plat_id,@analog_dess_model,@analog_model,@scanbody_dess_model,@scanbody_model,GETDATE()) "); DataAccessLayer.SqlDBHelper.ExecuteBatch(strSql.ToString(), tab.Select(n=>new IosDataTab { ios_guid = n.ios_guid, plat_id = n.plat_id, analog_dess_model = n.analog_dess_model, analog_model = n.analog_model, scanbody_dess_model = n.scanbody_dess_model, scanbody_model = n.scanbody_model }).ToList()); } /// <summary> /// 新增产品参数副表信息 /// </summary> /// <param name="assistantTabs"></param> public void AddProductAssistantListInfo(List<ProductAssistantTab> assistantTabs) { StringBuilder strSql = new StringBuilder(); List<SqlParameter> sp = new List<SqlParameter>(); strSql.Append(" insert into product_assistant_tab(relation_id,relation_type,guid,parts_guid) values(@relation_id,@relation_type,@guid,@parts_guid) "); DataAccessLayer.SqlDBHelper.ExecuteBatch(strSql.ToString(), assistantTabs); }
in 语句查询
/// <summary> /// 根据guid列表查询是否有数据 /// </summary> /// <param name="guidList"></param> /// <returns></returns> public int GetExistsExamineUser(List<string> guidList) { StringBuilder strSql = new StringBuilder(); strSql.Append(" select COUNT(examine_state) as examineCount from product_parameter_tab where guid in @GuidList and examine_state ='T' "); var args = new DynamicParameters(new { guidList }); int examineCount = DataAccessLayer.SqlDBHelper.QueryFirstOrDefault<int>(strSql.ToString(), args); return examineCount; }
存储过程使用示例:返回 DataSet
StringBuilder strSql = new StringBuilder(); List<SqlParameter> ilistStr = new List<SqlParameter>(); if (!string.IsNullOrWhiteSpace(AMONo)) { ilistStr.Add(new SqlParameter("@AMONo", AMONo)); } if (!string.IsNullOrWhiteSpace(ABillDateMin)) { ilistStr.Add(new SqlParameter("@ABillDateMin", ABillDateMin)); } if (!string.IsNullOrWhiteSpace(ABillDateMax)) { ilistStr.Add(new SqlParameter("@ABillDateMax", ABillDateMax)); } //存储过程带参的不能直接调用普通SQL执行的方法。 //SqlParameter[] param = ilistStr.ToArray(); //DataSet data = DataAccessLayer.SqlDBHelper.Query(strSql.ToString(), param); IDataParameter[] parameters = ilistStr.ToArray(); DataSet data = DataAccessLayer.SqlDBHelper.RunProcedure("spRpt_FindBillPO", parameters, "ds"); return data;
浙公网安备 33010602011771号