using System; using System.Data; using System.Data.SqlClient; using System.Windows.Forms; namespace NSAnalysis.DAL { public class SQLHelper { public static string connStr = ""; public static int iFlag = 0; #region 执行不带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 /// /// 执行不带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 /// /// 增删改SQL语句或存储过程 /// 命令类型 /// 返回受影响的行数 public static int ExecuteNonQuery(string cmdText, CommandType ct) { using (var conn = new SqlConnection(connStr)) { conn.Open(); using (var cmd = new SqlCommand(cmdText, conn)) { cmd.CommandType = ct; return cmd.ExecuteNonQuery(); } } } #endregion 执行不带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 #region 执行带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 /// /// 执行带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 /// /// 增删改SQL语句或存储过程 /// 命令类型 /// 返回受影响的行数 public static int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { using (var conn = new SqlConnection(connStr)) { conn.Open(); using (var cmd = new SqlCommand(cmdText, conn)) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); return cmd.ExecuteNonQuery(); } } } #endregion 执行带参数的增删改SQL语句或存储过程 返回int类型 返回受影响的行数 #region 执行不带参数的查询SQL语句或存储过程 返回DataTable类型 /// /// 执行不带参数的查询SQL语句或存储过程 返回DataTable类型 /// /// 查询SQL语句或存储过程 /// 命令类型 /// DataTable型 public static DataTable ExecuteQuery(string cmdText, CommandType ct) { DataTable dt = new DataTable(); using (var conn = new SqlConnection(connStr)) { conn.Open(); using (var cmd = new SqlCommand(cmdText, conn)) { cmd.CommandType = ct; using (var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } } } return dt; } #endregion 执行不带参数的查询SQL语句或存储过程 返回DataTable类型 #region 执行带参数的查询SQL语句或存储过程 返回DataTable类型 /// /// 执行带参数的查询SQL语句或存储过程 返回DataTable类型 /// /// 查询SQL语句或存储过程 /// 参数集合 /// 命令类型 /// DataTable型 public static DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) { DataTable dt = new DataTable(); using (var conn = new SqlConnection(connStr)) { conn.Open(); using (var cmd = new SqlCommand(cmdText, conn)) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } } } return dt; } #endregion 执行带参数的查询SQL语句或存储过程 返回DataTable类型 /// /// 执行SQL语句并返回DataSet /// /// SQL语句 /// public static DataSet ExecuteDs(String Sqlstr) { using (var conn = new SqlConnection(connStr)) { conn.Open(); using (SqlDataAdapter da = new SqlDataAdapter(Sqlstr, conn)) { DataSet ds = new DataSet(); da.Fill(ds); return ds; } } } /// /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// /// 数据库连接 /// 存储过程名 /// 存储过程参数 /// SqlCommand private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, SqlParameter[] 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; } /// /// 执行存储过程 /// /// 存储过程名 /// 存储过程参数 /// DataSet结果中的表名 /// DataSet public static DataSet RunProcedure(string storedProcName, SqlParameter[] parameters, string tableName) { using (SqlConnection connection = new SqlConnection(connStr)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } } #region 使用SqlBulkCopy插入测量数据 /// /// 要插入的数据表的结构,与函数内部定义的映射表要一模一样 /// /// 要插入的数据表 public static int InsertMeasureDataToDB(DataTable InsertDT) { int iResult = 1; using (var conn = new SqlConnection(connStr)) { conn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { try { bulkCopy.DestinationTableName = "TMeasureData"; bulkCopy.ColumnMappings.Add("CarID", "CarID"); bulkCopy.ColumnMappings.Add("CarType", "CarType"); bulkCopy.ColumnMappings.Add("MeasPointName", "MeasPointName"); bulkCopy.ColumnMappings.Add("DimensionName", "DimensionName"); bulkCopy.ColumnMappings.Add("NormalValue", "NormalValue"); bulkCopy.ColumnMappings.Add("LowerTolVal", "LowerTolVal"); bulkCopy.ColumnMappings.Add("UpperTolVal", "UpperTolVal"); bulkCopy.ColumnMappings.Add("MeasureValue", "MeasureValue"); bulkCopy.ColumnMappings.Add("MeasureItemResult", "MeasureItemResult"); bulkCopy.ColumnMappings.Add("MeasureDate", "MeasureDate"); bulkCopy.ColumnMappings.Add("Remark", "Remark"); bulkCopy.WriteToServer(InsertDT); } catch (Exception ex) { MessageBox.Show("批量插入测量数据到数据库失败!原因:" + ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); iResult = -1; } } } return iResult; } #endregion 使用SqlBulkCopy插入测量数据 #region 使用SqlBulkCopy插入批量数据方法 /// /// 要插入的数据表的结构,与函数内部定义的映射表要一模一样 /// /// 要插入的数据表 public static void TWorkpieceListToSQLServer(DataTable InsertDT) { using (var conn = new SqlConnection(connStr)) { conn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { try { bulkCopy.DestinationTableName = "TWorkpieceList"; bulkCopy.ColumnMappings.Add("WorkpieceID", "WorkpieceID"); bulkCopy.ColumnMappings.Add("DrawerID", "DrawerID"); bulkCopy.ColumnMappings.Add("WorkpieceType", "WorkpieceType"); bulkCopy.ColumnMappings.Add("TrayType", "TrayType"); bulkCopy.ColumnMappings.Add("WorkpieceStatus", "WorkpieceStatus"); bulkCopy.ColumnMappings.Add("WorkpiecePos", "WorkpiecePos"); bulkCopy.WriteToServer(InsertDT); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } #endregion 使用SqlBulkCopy插入批量数据方法 #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// /// 使用SqlBulkCopy将DataTable中的数据批量插入数据库中,用此函数,创建的InsertDataTable类型必须跟数据库中的类型,列数一模一样 /// /// 数据库中对应的表名 /// 数据集 public static void SqlBulkCopyInsert(string strDBTableName, DataTable InsertDataTable) { using (var conn = new SqlConnection(connStr)) { conn.Open(); using (SqlBulkCopy sqlRevdBulkCopy = new SqlBulkCopy(conn)) { sqlRevdBulkCopy.DestinationTableName = strDBTableName; sqlRevdBulkCopy.NotifyAfter = InsertDataTable.Rows.Count; sqlRevdBulkCopy.WriteToServer(InsertDataTable); } } } #endregion 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 } }