//綁定資料
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Fcw.RDLC
{
public class SQLHelper
{
public static SqlConnection conn = null;
public static SqlCommand cmd = null;
public static string connstr =System.Configuration.ConfigurationSettings.AppSettings[“Connstr”].ToString();
public SQLHelper()
{ }
#region 建立資料庫連接配接對象
/// <summary>
/// 建立資料庫連接配接
/// </summary>
/// <returns>傳回一個資料庫的連接配接SqlConnection對象</returns>
public static SqlConnection init()
{
try
{
conn = new SqlConnection(connstr);
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
return conn;
}
#endregion
#region 設定SqlCommand對象
/// <summary>
/// 設定SqlCommand對象
/// </summary>
/// <param name="cmd">SqlCommand對象 </param>
/// <param name="cmdText">指令文本</param>
/// <param name="cmdType">指令類型</param>
/// <param name="cmdParms">參數集合</param>
private static void SetCommand(SqlCommand cmd, string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
cmd.Parameters.AddRange(cmdParms);
}
}
#endregion
#region 執行相應的sql語句,傳回相應的DataSet對象
/// <summary>
/// 執行相應的sql語句,傳回相應的DataSet對象
/// </summary>
/// <param name="sqlstr">sql語句</param>
/// <returns>傳回相應的DataSet對象</returns>
public static DataSet GetDataSet(string sqlstr)
{
DataSet ds = new DataSet();
try
{
init();
SqlDataAdapter ada = new SqlDataAdapter(sqlstr, conn);
ada.Fill(ds);
conn.Close();
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
return ds;
}
#endregion
#region 執行相應的sql語句,傳回相應的DataSet對象
/// <summary>
/// 執行相應的sql語句,傳回相應的DataSet對象
/// </summary>
/// <param name="sqlstr">sql語句</param>
/// <param name="tableName">表名</param>
/// <returns>傳回相應的DataSet對象</returns>
public static DataSet GetDataSet(string sqlstr, string tableName)
{
DataSet ds = new DataSet();
try
{
init();
SqlDataAdapter ada = new SqlDataAdapter(sqlstr, conn);
ada.Fill(ds, tableName);
conn.Close();
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
return ds;
}
#endregion
#region 執行不帶參數sql語句,傳回一個DataTable對象
/// <summary>
/// 執行不帶參數sql語句,傳回一個DataTable對象
/// </summary>
/// <param name="cmdText">相應的sql語句</param>
/// <returns>傳回一個DataTable對象</returns>
public static DataTable GetDataTable(string cmdText)
{
SqlDataReader reader;
DataTable dt = new DataTable();
try
{
init();
cmd = new SqlCommand(cmdText, conn);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dt.Load(reader);
reader.Close();
}
catch (Exception ex)
{
// throw new Exception(ex.Message.ToString());
}
return dt;
}
#endregion
#region 執行帶參數的sql語句或存儲過程,傳回一個DataTable對象
/// <summary>
/// 執行帶參數的sql語句或存儲過程,傳回一個DataTable對象
/// </summary>
/// <param name="cmdText">sql語句或存儲過程名</param>
/// <param name="cmdType">指令類型</param>
/// <param name="cmdParms">參數集合</param>
/// <returns>傳回一個DataTable對象</returns>
public static DataTable GetDataTable(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
SqlDataReader reader;
DataTable dt = new DataTable();
try
{
init();
cmd = new SqlCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dt.Load(reader);
reader.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return dt;
}
#endregion
#region 執行不帶參數sql語句,傳回所影響的行數
/// <summary>
/// 執行不帶參數sql語句,傳回所影響的行數
/// </summary>
/// <param name="cmdText">增,删,改sql語句</param>
/// <returns>傳回所影響的行數</returns>
public static int ExecuteNonQuery(string cmdText)
{
int count;
try
{
init();
cmd = new SqlCommand(cmdText, conn);
count = cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return count;
}
#endregion
#region 執行帶參數sql語句或存儲過程,傳回所影響的行數
/// <summary>
/// 執行帶參數sql語句或存儲過程,傳回所影響的行數
/// </summary>
/// <param name="cmdText">帶參數的sql語句和存儲過程名</param>
/// <param name="cmdType">指令類型</param>
/// <param name="cmdParms">參數集合</param>
/// <returns>傳回所影響的行數</returns>
public static int ExecuteNonQuery(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
int count;
try
{
init();
cmd = new SqlCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
count = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return count;
}
#endregion
#region 執行不帶參數sql語句,傳回一個從資料源讀取資料的SqlDataReader對象
/// <summary>
/// 執行不帶參數sql語句,傳回一個從資料源讀取資料的SqlDataReader對象
/// </summary>
/// <param name="cmdText">相應的sql語句</param>
/// <returns>傳回一個從資料源讀取資料的SqlDataReader對象</returns>
public static SqlDataReader ExecuteReader(string cmdText)
{
SqlDataReader reader;
try
{
init();
cmd = new SqlCommand(cmdText, conn);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return reader;
}
#endregion
#region 執行帶參數的sql語句或存儲過程,傳回一個從資料源讀取資料的SqlDataReader對象
/// <summary>
/// 執行帶參數的sql語句或存儲過程,傳回一個從資料源讀取資料的SqlDataReader對象
/// </summary>
/// <param name="cmdText">sql語句或存儲過程名</param>
/// <param name="cmdType">指令類型</param>
/// <param name="cmdParms">參數集合</param>
/// <returns>傳回一個從資料源讀取資料的SqlDataReader對象</returns>
public static SqlDataReader ExecuteReader(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
SqlDataReader reader;
try
{
init();
cmd = new SqlCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return reader;
}
#endregion
#region 執行不帶參數sql語句,傳回結果集首行首列的值object
/// <summary>
/// 執行不帶參數sql語句,傳回結果集首行首列的值object
/// </summary>
/// <param name="cmdText">相應的sql語句</param>
/// <returns>傳回結果集首行首列的值object</returns>
public static object ExecuteScalar(string cmdText)
{
object obj;
try
{
init();
cmd = new SqlCommand(cmdText, conn);
obj = cmd.ExecuteScalar();
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return obj;
}
#endregion
#region 執行帶參數sql語句或存儲過程,傳回結果集首行首列的值object
/// <summary>
/// 執行帶參數sql語句或存儲過程,傳回結果集首行首列的值object
/// </summary>
/// <param name="cmdText">sql語句或存儲過程名</param>
/// <param name="cmdType">指令類型</param>
/// <param name="cmdParms">傳回結果集首行首列的值object</param>
/// <returns></returns>
public static object ExecuteScalar(string cmdText, CommandType cmdType, SqlParameter[] cmdParms)
{
object obj;
try
{
init();
cmd = new SqlCommand();
SetCommand(cmd, cmdText, cmdType, cmdParms);
obj = cmd.ExecuteScalar();
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}
return obj;
}
#endregion
}
}
//資料綁定之報表------------------------------------------------------------------------------------------------------------------
using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Fcw.RDLC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//綁定list_order
DataTable dtorder = SQLHelper.GetDataTable(@"select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode from fcwOrder o");
list_order.DataSource = dtorder;
list_order.DisplayMember = "ordercode";
list_order.ValueMember = "ordername";
}
private void button1_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
//構造多選的order清單
foreach (object obj in list_order.SelectedItems)
{
DataRowView drv = (DataRowView)obj;
if(drv!=null)
{
sb.Append("'" + drv.Row["ordercode"].ToString() + "',");
}
}
//為report綁定資料源
if (sb.ToString().Length > 2)
{
string orderwhere = sb.ToString().Substring(0, sb.ToString().Length - 1);
string strsql = @"select o.id as orderid,o.ordercode,o.opername,o.ordername,o.comname,o.createtime,o.barcode,
d.id as detailid,d.ordercode detailordercode,d.procode,d.proname,d.promodel,d.pronum
from fcwOrder o
join fcwOrderDetails d on d.ordercode=o.ordercode where o.ordercode in (" + orderwhere + ")";
DataTable dtorder2 = SQLHelper.GetDataTable(strsql);
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.EnableExternalImages = true;
reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("Order",dtorder2));
reportViewer1.LocalReport.SetParameters(new ReportParameter("para_Total",dtorder2.Rows.Count.ToString()));
reportViewer1.RefreshReport();
}
}
}
}