using Model;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAL
{
public static class SqlHelper
{
//public static string conStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString.ToString();
public static string conStr = "server=***;uid=sa;pwd=******;database=TripMaster";
/// <summary>
/// 用一个sql语句和可变的SQLParameter数组增删改数据库的数据并且返回受影响的行数,当受影响行数为0时返回的是负数
/// </summary>
/// <param name="cmdStr">sql语句</param>
/// <param name="sqlParams">params形的变量数组</param>
/// <returns>返回受影响的行数</returns>
public static int ExecuteNonQuery(string cmdStr, params SqlParameter[] sqlParams)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
if (sqlParams != null)
{
cmd.Parameters.AddRange(sqlParams);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 使用一个sql语句来查找数据库,返回查找数据的第一行第一列的数据
/// </summary>
/// <param name="cmdStr">sql语句</param>
/// <param name="sqlParams">params形式的SqlParameters数组</param>
/// <returns>返回所查找信息第一行第一列的数据,类型未知,所以用object接收</returns>
public static object ExecuteScalar(string cmdStr, params SqlParameter[] sqlParams)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
if (sqlParams != null)
{
cmd.Parameters.AddRange(sqlParams);
}
con.Open();
return cmd.ExecuteScalar();
}
}
}
/// <summary>
/// 使用一个sql语句查找数据返回一个dataTable;
/// </summary>
/// <param name="cmdStr">sql语句</param>
/// <param name="sqlParams">params形式的SqlParameter数组</param>
/// <returns>返回一张表DataTable</returns>
public static DataTable ExecuteDataTable(string cmdStr, params SqlParameter[] sqlParams)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
con.Open();
if (sqlParams != null)
{
cmd.Parameters.AddRange(sqlParams);
}
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
return dt;
}
}
}
}
/// <summary>
/// 使用一个sql语句查找数据库信息,返回一个SqldataReader,封装这一个方法时要注意,cmd是可以关闭的,
/// 而适配器在读取数据的时候con是不能关闭的
/// 所以要在适配器的创建里面加上参数System.Data.CommandBehavior.CloseConnection,
/// 这个参数的意思是当适配器关闭的时候顺便也关闭con,就是con直到不再从数据库读取数据时才可以关闭
/// </summary>
/// <param name="cmdStr">sql语句</param>
/// <param name="sqlParams">params形式的SqlParameters数组</param>
/// <returns>返回一个SqlDatareader可以进行读取数据</returns>
public static SqlDataReader ExecuteReader(string cmdStr, params SqlParameter[] sqlParams)
{
SqlConnection con = new SqlConnection(conStr);
using (SqlCommand cmd = new SqlCommand(cmdStr, con))
{
if (sqlParams != null)
{
cmd.Parameters.AddRange(sqlParams);
}
try
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
return reader;
}
catch
{
con.Close();
con.Dispose();
throw;//不抛出这个就会报错
}
finally
{
}
}
}
public static int ExcuteAddMany(string cmdStr, string[] tempArray, params SqlParameter[] sqlParams)
{
DataTable table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("LayerNum");
for (int i=0; i<tempArray.Length;i++)
{
DataRow row = table.NewRow();
row["Name"] = tempArray[i].ToString();
row["LayerNum"] = 0;
table.Rows.Add(row);
}
string connectionStr = "server=PC-201701130905\\B;uid=sa;pwd=s07j08b11;database=TripMaster";
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionStr))
{
bulkCopy.BatchSize = table.Rows.Count;
bulkCopy.DestinationTableName = "SQLBulkCopyTest";//在插入的目标表
//DataTable列名与数据库列名的映射
bulkCopy.ColumnMappings.Add("LayerNum", "LayerNum");
bulkCopy.ColumnMappings.Add("Name", "Name");
bulkCopy.WriteToServer(table);//写入到数据库中
}
return 1;
}
}
}