You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
5.6 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mesnac.Maths;
using Mesnac.Equips;
using System.Data.Common;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Xml.Serialization;
namespace Mesnac.Math.Feeding
{
public class SmallMaterialList:IMath
{
private object NullResult = new DataTable();
public string Name
{
get { return "小料列表"; }
}
public string Caption
{
get
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("必须填写使用数据库连接的设备名称");
sb.AppendLine("例:");
sb.Append(" ").Append(Name).AppendLine("(A1)");
return sb.ToString();
}
}
public object Execute(string[] parameters, object[] buff)
{
string id = string.Empty;
if ((buff.Length > 0)
&& (buff[0] != null)
&& (!string.IsNullOrWhiteSpace(buff[0].ToString())))
{
id = buff[0].ToString();
}
if (string.IsNullOrWhiteSpace(id))
{
return this.NullResult;
}
if (parameters.Length < 1)
{
return this.NullResult;
}
string equipName = parameters[0];
BaseEquip equip = null;
if (!Mesnac.Equips.Factory.Instance.AllEquips.TryGetValue(equipName, out equip))
{
return this.NullResult;
}
DataTable Result = new DataTable();
string xml = string.Empty;
try
{
DbConnection conn = equip.Main.ConnType.Connection as DbConnection;
if (conn == null)
{
return this.NullResult;
}
using (SqlConnection sqlCon = new SqlConnection(conn.ConnectionString))
{
sqlCon.Open();
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.Connection = sqlCon;
sqlcmd.CommandType = System.Data.CommandType.Text;
string sqlstr = "SELECT ssValue FROM SysKeyValue WHERE ssKey='JLCLHM_SmallMaterialList'";
sqlcmd.CommandText = sqlstr;
object obj = sqlcmd.ExecuteScalar();
if (obj != null && obj != DBNull.Value)
{
xml = obj.ToString();
}
sqlCon.Close();
if (string.IsNullOrWhiteSpace(xml))
{
return this.NullResult;
}
}
#region 旧代码在多线程并发访问数据库时容易引发DataReader未关闭异常
//bool isOpen = true;
//if (conn.State != ConnectionState.Open)
//{
// isOpen = false;
// conn.Open();
//}
////Result.TableName = id;
////Result.Columns.Add("序号");
////Result.Columns.Add("小料名称");
////Result.Columns.Add("小料标重");
////Result.Columns.Add("实重");
////Result.Columns.Add("误差");
//DbCommand sqlcmd = conn.CreateCommand();
//sqlcmd.CommandType = System.Data.CommandType.Text;
//string sqlstr = "SELECT ssValue FROM SysKeyValue WHERE ssKey='JLCLHM_SmallMaterialList'";
//sqlcmd.CommandText = sqlstr;
//object obj = sqlcmd.ExecuteScalar();
//if (obj != null && obj != DBNull.Value)
//{
// xml = obj.ToString();
//}
//sqlcmd.Dispose();
//if (!isOpen)
//{
// conn.Close();
//}
//if (string.IsNullOrWhiteSpace(xml))
//{
// return this.NullResult;
//}
#endregion
Result = DeserializeObject<DataTable>(xml);
if (Result.Columns.Contains("实际"))
{
Result.Columns["实际"].ReadOnly = false;
}
if (Result.Columns.Contains("实重"))
{
Result.Columns["实重"].ReadOnly = false;
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("发生错误在Mesnac.Math.Fedding.SmallMaterialList" + ex.Message, ex);
}
Result.TableName = String.Format("T_SmallMaterialList_{0}", Guid.NewGuid().ToString());
return Result;
}
/// <summary>
/// 把xml字符串反序列化为对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlString"></param>
/// <returns></returns>
private T DeserializeObject<T>(string xmlString)
{
if (!String.IsNullOrEmpty(xmlString))
{
StringReader strReader = new StringReader(xmlString);
XmlSerializer serializer = new XmlSerializer(typeof(T));
T obj = (T)serializer.Deserialize(strReader);
strReader.Close();
strReader.Dispose();
return obj;
}
else
{
return default(T);
}
}
}
}