Integration :

- Modifica lettura POLY per Contorno Libero (da "P(0,...),P(1,...)" a "P(...),A(...)")
- Lettura config.ini (sezione EGALTECH: PATH_EXE e DIR_PATH), per avvio EgtCAM5 e salvataggio file BTL 
- Process Parameters Qnn stampati nel BTL come USERATTRIBUTE e solo se diversi da 0
- Lunghezza barra = [lunghezza Element + 2000] nel caso Ordine
- Pulizia codice (Classe ErrorManager.cs eliminata, format e commenti vari)
This commit is contained in:
Renzo Lanza
2019-01-22 07:49:51 +00:00
parent e23a5add4c
commit 2b02a9421a
5 changed files with 81 additions and 199 deletions
+27 -31
View File
@@ -20,9 +20,9 @@ namespace ib.essetre.integration.egaltech
//I seguenti Id servono per il nome del file BTL
public int productionId;
public int patternId;
public string fileName;
public int projectId;
public int elementId;
public string fileName;
public BTL()
{
@@ -37,10 +37,10 @@ namespace ib.essetre.integration.egaltech
this.features = features;
}
public string writeIntoFile(bool isFromProject)
public string writeIntoFile(bool isFromProject, string dirPath)
{
// La directory in cui salvare il file viene qui inizializzata
DirectoryInfo di = new DirectoryInfo(Path.GetTempPath() + @"FileBTL\");
DirectoryInfo di = new DirectoryInfo(dirPath);
// Se la directory non esiste viene creata
if (!di.Exists)
@@ -51,13 +51,18 @@ namespace ib.essetre.integration.egaltech
//Il nome del file cambia a seconda che si tratti del caso Produzione o caso Ordine
string typeName = null;
if (isFromProject)
{
typeName = "part";
fileName = String.Format("{0}.btl", typeName + "_" + this.projectId + "_" + this.elementId);
}
else
{
typeName = "bar";
fileName = String.Format("{0}.btl", typeName + "_" + this.productionId + "_" + this.patternId);
}
// Si combina in un'unica stringa il percorso della directory e il nome del file da salvare
fileName = String.Format("{0}.btl", typeName + "_" + this.productionId + "_" + this.patternId); // DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")));
string filePath = Path.Combine(di.FullName, fileName); // DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")));
string filePath = Path.Combine(di.FullName, fileName);
// Se un file txt (contenente messaggio di errore) con lo stesso nome esiste già viene cancellato
if (File.Exists(filePath.Replace(".btl", ".txt")))
@@ -73,11 +78,7 @@ namespace ib.essetre.integration.egaltech
tw.WriteLine(Constants.GENERAL);
tw.WriteLine(Constants.PROJECT_NUMBER + this.projectNumber);
tw.WriteLine(Constants.SCALE_UNIT + this.scaleUnit);
if (isFromProject)
tw.WriteLine(Constants.USERATTRIBUTE + "\"BARLEN\":" + "\"N/A\""); // Nel caso Ordine non c'è il BarLength (colonna "l" nel DB)
else
tw.WriteLine(Constants.USERATTRIBUTE + "\"BARLEN\":" + "\"" + this.barLength + "\"");
tw.WriteLine(Constants.USERATTRIBUTE + "\"BARLEN\":" + "\"" + this.barLength + "\"");
foreach (Part singlePart in parts)
{
@@ -100,10 +101,10 @@ namespace ib.essetre.integration.egaltech
string posX = singlePart.x.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture);
tw.WriteLine(Constants.USERATTRIBUTE + "\"POSX\":" + "\"" + posX + "\"");
string inv = singlePart.inverted.ToString(); // "0.00", System.Globalization.CultureInfo.InvariantCulture);
string inv = singlePart.inverted.ToString();
tw.WriteLine(Constants.USERATTRIBUTE + "\"INVERTED\":" + "\"" + inv + "\"");
string rot = singlePart.rotated.ToString(); // "0.00", System.Globalization.CultureInfo.InvariantCulture);
string rot = singlePart.rotated.ToString();
tw.WriteLine(Constants.USERATTRIBUTE + "\"ROTATED\":" + "\"" + rot + "\"");
if (isFromProject)
@@ -133,22 +134,20 @@ namespace ib.essetre.integration.egaltech
tw.Write("P" + i.ToString("D2") + ":" + MultAndConvertTo8(singleParameter) + " ");
else
tw.Write("P" + i.ToString("D2") + ":" + "\"\" "); // P15: ""
if (i == 26)
tw.WriteLine(" "); // Vado a capo
}
else
{
// Stampo i vari parametri Qnn preceduti da "COMMENT:"
if (i == 27)
{
tw.WriteLine(" "); // Vado a capo
tw.Write(Constants.COMMENT);
}
tw.Write("Q" + (i - 26).ToString("D2") + ":" + MultAndConvertTo8(singleParameter) + " ");
// Stampo i vari parametri Qnn diversi da 0, preceduti da "USERATTRIBUTE:"
if (!singleParameter.Equals("0"))
tw.WriteLine(Constants.USERATTRIBUTE + "\"Q" + (i - 26).ToString("D2") + "\":\"" + singleParameter + "\" ");
}
//Convert.ToInt16(i);
i++;
}
tw.WriteLine(" "); // Vado a capo
tw.WriteLine(Constants.PROCESS_IDENT + singleFeature.processIdent);
tw.WriteLine(Constants.PROCESS + singleFeature.process);
}
@@ -170,15 +169,16 @@ namespace ib.essetre.integration.egaltech
{
if (sag1 != "")
{
string[] arrParam = sag1.Split(new string[] { "POLY([P(", ")],'P','C')", "),P(" }, StringSplitOptions.RemoveEmptyEntries);
string[] arrParam = sag1.Split(new string[] { "POLY([", "),", ")],'P','O')" }, StringSplitOptions.RemoveEmptyEntries);
int count = 0; // Nel caso in cui ci troviamo alla fine di un Arco questa viene incrmentata di 1, in modo da scrivere il numero parametro corretto nei seguenti cicli
Boolean flagArco = false; // Nel caso in cui ci troviamo all'inizio di un Arco questa viene posta a TRUE, in modo da passare nel percorso dedicato nel prossimo ciclo
for (int i = 0; i < arrParam.Length; i++)
{
string[] parts = arrParam[i].Split(','); // ogni parametro P di POLY viene splittato in più parti
char[] separators = { ',', '(' };
string[] parts = arrParam[i].Split(separators); // ogni parametro P di POLY viene splittato in più parti
switch (parts[0]) // il primo elemento di parts[] indica se ci troviamo all'inizio di un Arco o no
{
case "0":
case "P":
if (i == 0) // Caso StartPoint
{
tw.WriteLine(Constants.PROCESS_KEY + singleFeature.processKey + " " + singleFeature.designation);
@@ -203,7 +203,6 @@ namespace ib.essetre.integration.egaltech
tw.WriteLine(" ");
tw.WriteLine(Constants.PROCESS_IDENT + (Convert.ToInt16(singleFeature.processIdent) + i - count));
tw.WriteLine(Constants.PROCESS + singleFeature.process);
//tw.WriteLine(Constants.USERATTRIBUTE + "\"TASKID\":" + "\"" + singleFeature.taskId + "\"");
}
else if (flagArco) // Caso FineArco
{
@@ -234,13 +233,12 @@ namespace ib.essetre.integration.egaltech
tw.WriteLine(" ");
tw.WriteLine(Constants.PROCESS_IDENT + (Convert.ToInt16(singleFeature.processIdent) + i - count));
tw.WriteLine(Constants.PROCESS + singleFeature.process);
//tw.WriteLine(Constants.USERATTRIBUTE + "\"TASK\":" + "\"" + singleFeature.taskId + "\"");
}
break;
case "1": // Caso InizioArco
case "A": // Caso InizioArco
tw.WriteLine(Constants.PROCESS_KEY + singleFeature.processKey + " " + singleFeature.designation);
tw.Write(Constants.PROCESS_PARAMETERS);
string[] nextParts = arrParam[i + 1].Split(',');
string[] nextParts = arrParam[i + 1].Split(separators);
tw.Write("P01:" + MultAndConvertTo8(nextParts[1]) + " "); // x (EndPoint Arc)
tw.Write("P02:" + MultAndConvertTo8(nextParts[2]) + " "); // y (EndPoint Arc)
tw.Write("P03:" + MultAndConvertTo8(nextParts[3]) + " "); // z (Endpoint Arc)
@@ -261,7 +259,6 @@ namespace ib.essetre.integration.egaltech
tw.WriteLine(" ");
tw.WriteLine(Constants.PROCESS_IDENT + (Convert.ToInt16(singleFeature.processIdent) + i - count));
tw.WriteLine(Constants.PROCESS + singleFeature.process);
//tw.WriteLine(Constants.USERATTRIBUTE + "\"TASK\":" + "\"" + singleFeature.taskId + "\"");
flagArco = true;
break;
default:
@@ -287,14 +284,13 @@ namespace ib.essetre.integration.egaltech
tw.WriteLine(" ");
tw.WriteLine(Constants.PROCESS_IDENT + (Convert.ToInt16(singleFeature.processIdent) + i - count));
tw.WriteLine(Constants.PROCESS + singleFeature.process);
//tw.WriteLine(Constants.USERATTRIBUTE + "\"TASK\":" + "\"" + singleFeature.taskId + "\"");
break;
}
}
}
}
// Il seguente metodo prende il valore di un process parameter, lo moltiplica per 10^scaleUnit
// Il seguente metodo prende il valore di un Process Parameter, lo moltiplica per 10^scaleUnit
// e lo converte in una stringa di 8 caratteri (i caratteri mancanti sono degli 0)
public string MultAndConvertTo8(string processParameter)
{
-15
View File
@@ -37,20 +37,5 @@ namespace ib.essetre.integration.egaltech
// Stringa contenente i parametri di connessione al DB
public const string ConnectionString = @"Data Source=localhost\SQLEssetre;Initial Catalog=ESSETRE;User ID=sa;Password=essetre";
// Query al DB che estrae i campi specificati dal join tra vw_Task e vw_Cut in base ad un patternId
// specificato laddove questa costante venga usata nel codice
public const string sqlSelectJoinTaskCutByPattern = "SELECT vw_Task.productionId, " +
"vw_Task.patternId, vw_Task.cutId ,taskId, info1, info2, enabled, level, " +
"inTools,outTools,isChecked,vw_Task.done,isoType,ax,ay,az, vw_Cut.x, vw_Cut.y, vw_Cut.z, " +
"vw_Task.flagDeleted, [group], [key], face, edge, des, p01, p02, p03, p04, p05, p06, " +
"p07, p08, p09, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, " +
"p26, q01, q02, q03, q04, q05, q06, q07, q08, q09, q10, q11, q12, q13, q14, q15, q16, q17, " +
"q18, q19, q20, priority, processIdent, processingQuality, sag1, projectId, elementId, cutStart, cutEnd, " +
"inverted, rotated, doneTime, startAngle, endAngle, referenceCutId, length, width, height " +
"FROM ESSETRE.dbo.vw_Task " +
"INNER JOIN vw_Cut ON " +
"(vw_Task.cutId = vw_Cut.cutId AND vw_Task.patternId = vw_Cut.patternId AND vw_Task.productionId = vw_Cut.productionId) " +
"WHERE vw_Task.patternId = ";
}
}
-70
View File
@@ -1,70 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
namespace ib.essetre.integration.egaltech
{
static class ErrorManager
{
public enum ErrorType
{
[DescriptionAttribute("Nessun errore")]
NONE = 0,
[DescriptionAttribute("Errore da definire 1")]
ERROR1 = 1,
[DescriptionAttribute("Errore da definire 2")]
ERROR2 = 2,
[DescriptionAttribute("Errore da definire 3")]
ERROR3 = 3,
[DescriptionAttribute("Errore da definire 4")]
ERROR4 = 4
}
public static void writeErrorToFile(ErrorType et, string BTLname)
{
//DirectoryInfo di = new DirectoryInfo(Path.GetTempPath() + @"TestoErrore\");
//// Se la directory non esiste viene creata
//if (!di.Exists)
//{
// di.Create();
//}
//string filename = Path.Combine(di.FullName, String.Format("{0}.txt", "Prova" + DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")));
string filePath = "C:\\Temp\\" + BTLname + ".txt";
using (StreamWriter writer = new StreamWriter(filePath, true))
{
writer.WriteLine("Errore: " + (int)et);
writer.WriteLine();
writer.WriteLine("Descrizione : " + GetDescription(et) + " (" + DateTime.Now.ToString() + ") ");
writer.WriteLine();
}
}
public static string GetDescription(this Enum currentEnum)
{
string description = String.Empty;
DescriptionAttribute da;
FieldInfo fi = currentEnum.GetType().GetField(currentEnum.ToString());
da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
if (da != null)
description = da.Description;
else
description = currentEnum.ToString();
return description;
}
}
}
+54 -82
View File
@@ -58,16 +58,17 @@ namespace ib.essetre.integration.egaltech
//campo data ultima modifica nel DATABASE [lastModified]
private static void DoJob(InOutParameters parameters, ICallBack callback)
{
PatternInfo.Results r = PatternInfo.Results.OK;
PatternInfo.Results o;
string msg;
parameters.Patterns[0].SetTaskState(0, 0, r, "prova");
if (parameters.Patterns[0].GetTaskState(0, 0, out o, out msg))
System.Windows.Forms.MessageBox.Show("Result: " + o + "\n" + "Msg: " + msg);
//PatternInfo.Results r = PatternInfo.Results.OK;
//PatternInfo.Results o;
//string msg;
//parameters.Patterns[0].SetTaskState(0, 0, r, "prova");
//if (parameters.Patterns[0].GetTaskState(0, 0, out o, out msg))
// System.Windows.Forms.MessageBox.Show("Result: " + o + "\n" + "Msg: " + msg);
callback.Progress(0, "Init");
String percorsoExe = parameters.Read("EGALTECH", "PATH_EXE", "");
//int configurationId = parameters.ConfigurationId; //id cofigurazione macchina condizione where per tool e parametri glob
//String connectionString = parameters.ConnectionString; //stringa connessione db
//parameters.Patterns //EventLogEntryCollection schemi da elaborare
@@ -141,69 +142,57 @@ namespace ib.essetre.integration.egaltech
else
sql = sqlProduction;
//Connessione al DB ed esecuzione query
var cn = new SqlConnection(Constants.ConnectionString);
SqlCommand cmd = new SqlCommand(sql, cn);
cn.Open();
var dataAdapter = new SqlDataAdapter(cmd);
//var commandBuilder = new SqlCommandBuilder(dataAdapter);
//Lettura DB e riempimento DataSEt
var tempDs = new DataSet();
dataAdapter.Fill(tempDs);
//ds = tempDs;
//for(int iTable = 0; iTable < ds.Tables.Count; iTable++)
//{
// if (AreTablesTheSame(ds.Tables[iTable], tempDs.Tables[0]))
// ds.Tables.Remove(ds.Tables[iTable]);
//}
//tempDs.Tables[0].TableName = "Table" + ds.Tables.Count;
//ds.Tables.Add(tempDs.Tables[0].Copy());
if(ds.Tables.Count != 0)
//Rimozione tabella precedente e aggiunta nuova nel DB.
//Questo è per evitare che venga aggiunta una tabella uguale ad una già presente, causando errore
if (ds.Tables.Count != 0)
ds.Tables.Remove(ds.Tables[0]);
ds.Tables.Add(tempDs.Tables[0].Copy());
//tempDs.Tables[0].TableName = "Table1";
//ds.Tables.Add(tempDs.Tables[0].Copy());
//tempDs.Tables[0].TableName = "Table2";
//ds.Tables.Add(tempDs.Tables[0].Copy());
//string prova = ds.Tables[0].TableName;
//string prova2 = ds.Tables[1].TableName;
//Verifica parametro isFromProject: nel caso Ordine viene ottenuta la lista dei Process,
//nel caso Produzione viene ottenuta la lista dei Task
if (parameters.Patterns[i].IsFromProject)
getListaProcesses(btlObject, i);
else
getListaTasks(btlObject, i);
//Dialog con Progress Bar
System.Threading.Thread.Sleep(1000); // solo di test
float progValue = (float)1 / numBars;
callback.Progress(progValue * (i+1),
" Progresso: " + (progValue * (i + 1) * 100) + "%" + "\n" +
" BTL generati: " + (i+1) + " su " + numBars);
callback.Progress(progValue * (i + 1),
" Progresso: " + (progValue * (i + 1) * 100) + "%" + "\n" +
" BTL generati: " + (i + 1) + " su " + numBars);
string filePath = btlObject.writeIntoFile(parameters.Patterns[i].IsFromProject); // Constants.fullPath);
//System.Windows.Forms.MessageBox.Show("File scritto!");
//ErrorManager.writeErrorToFile(ErrorManager.ErrorType.NONE, btlObject.fileName);
//System.Diagnostics.Process.Start(filePath);
string path = "\"" + filePath + "\" " + parameters.MachineName + " " + (int)parameters.UIMode + " " + parameters.Patterns[i].OutputFilename;
Process process = Process.Start("C:\\EgtProg\\EgtCAM5\\EgtCAM5R32.exe", path); // "\"" + filePath + "\" "
//+ parameters.MachineName + " " + parameters.UIMode + " " + parameters.Patterns[0].OutputFilename);
//Si ottiene il percorso delle cartelle in cui salvare i FileBTL e si
//esegue EgtCAM5 in base ad alcuni parametri passati nella string path
string percorsoDirBTL = parameters.Read("EGALTECH", "DIR_BTL", "");
string filePath = btlObject.writeIntoFile(parameters.Patterns[i].IsFromProject, percorsoDirBTL);
string path = "\"" + filePath + "\" " + parameters.MachineName + " " +
(int)parameters.UIMode + " " + parameters.Patterns[i].OutputFilename;
Process process = Process.Start(percorsoExe, path);
// Aspetta che il file txt dell'errore venga creato da EgtCAM5
while (!File.Exists(filePath.Replace(".btl", ".txt")))
{
// Se siamo ad un ciclo successivo al numero max di istanze che EgtCAM5 può aprire
// Se siamo ad un ciclo successivo al numero max di istanze che EgtCAM5 può aprire,
// il programma cicla in questo while all'infinito ---> SISTEMARE
System.Threading.Thread.Sleep(1000);
}
string text = System.IO.File.ReadAllText(filePath.Replace(".btl", ".txt"));
//string text = System.IO.File.ReadAllText(filePath.Replace(".btl", ".txt"));
//parameters.Patterns[i].SetTaskState(btlObject.cutId, parameters.Patterns[i]. btlObject.features., PatternInfo.Results.ERROR, text);
//parameters.Patterns[i].GetTaskState(cutId, taskId, PatternInfo.Results, text);
System.Windows.Forms.MessageBox.Show(text, "Error");
//System.Windows.Forms.MessageBox.Show(text, "Error");
////imposta le modifiche
////solo se parameters.Patterns[i].Transformable
@@ -253,9 +242,6 @@ namespace ib.essetre.integration.egaltech
//non implementata al momento
}
// DA SISTEMARE: i vari ds.Tables[0] (e forse anche i Rows[0]) probabilmente han bisogno dell'indice i
// in conseguenza al vettore di travi in input (al posto del vettore singolo)
// Il seguente metodo prende i record visualizzati in ds (Caso: Produzione) e li carica in un oggetto BTL
public static void getListaTasks(BTL btlObject, int i)
{
@@ -265,7 +251,7 @@ namespace ib.essetre.integration.egaltech
btlObject.projectNumber = ds.Tables[i].Rows[0]["projectId"].ToString();
btlObject.scaleUnit = Convert.ToString(2);
btlObject.barLength = Convert.ToString(getBarLengthP((int)ds.Tables[i].Rows[0]["patternId"],
(int)ds.Tables[i].Rows[i]["productionId"]));
(int)ds.Tables[i].Rows[0]["productionId"]));
btlObject.parts = new List<BTL.Part>();
btlObject.productionId = (int)ds.Tables[i].Rows[0]["productionId"];
@@ -295,6 +281,7 @@ namespace ib.essetre.integration.egaltech
readPart.x = (double)ds.Tables[i].Rows[ltc]["x"];
readPart.inverted = ds.Tables[i].Rows[ltc]["inverted"].ToString();
readPart.rotated = ds.Tables[i].Rows[ltc]["rotated"].ToString();
readPart.cutId = (int)ds.Tables[i].Rows[ltc]["cutId"];
}
readPart.features = new List<BTL.Feature>();
@@ -387,8 +374,8 @@ namespace ib.essetre.integration.egaltech
btlObject.projectNumber = ds.Tables[i].Rows[0]["projectId"].ToString();
btlObject.scaleUnit = Convert.ToString(2);
//btlObject.barLength = Convert.ToString(getBarLengthO((int)ds.Tables[0].Rows[0]["elementId"],
// (int)ds.Tables[0].Rows[0]["projectId"]));
btlObject.barLength = Convert.ToString(getBarLengthO((int)ds.Tables[i].Rows[0]["elementId"],
(int)ds.Tables[i].Rows[0]["projectId"]));
btlObject.parts = new List<BTL.Part>();
btlObject.projectId = (int)ds.Tables[i].Rows[0]["projectId"];
@@ -418,6 +405,7 @@ namespace ib.essetre.integration.egaltech
readPart.x = (double)ds.Tables[i].Rows[ltc]["x"];
readPart.inverted = ds.Tables[i].Rows[ltc]["inverted"].ToString();
readPart.rotated = ds.Tables[i].Rows[ltc]["rotated"].ToString();
readPart.cutId = (int)ds.Tables[i].Rows[ltc]["cutId"]; //In realtà i Process non hanno il cutId, se non virtuale
}
readPart.features = new List<BTL.Feature>();
@@ -428,7 +416,7 @@ namespace ib.essetre.integration.egaltech
{
BTL.Feature readFeature = new BTL.Feature();
readFeature.processId = ds.Tables[i].Rows[f]["processId"].ToString(); //readFeature.taskId = ds.Tables[0].Rows[f]["taskId"].ToString();
readFeature.processId = ds.Tables[i].Rows[f]["processId"].ToString();
readFeature.processKey = ds.Tables[i].Rows[f]["group"].ToString() +
"-" + ds.Tables[i].Rows[f]["key"].ToString().Substring(1, 3) +
@@ -502,7 +490,7 @@ namespace ib.essetre.integration.egaltech
btlObject.parts.Sort((p, q) => p.x.CompareTo(q.x));
}
// Il seguente metodo si connette al Database per estrarre tramite una query i cutId della tabella vw_Cut
// Il seguente metodo si connette al DB per estrarre tramite una query i cutId della tabella vw_Cut
// aventi patternId e ProductionId che corrispondono a quelli passati come argomento
private static List<int> getListaCutIdP(int patternId, int productionId)
{
@@ -525,7 +513,7 @@ namespace ib.essetre.integration.egaltech
return ListaCutId;
}
// Il seguente metodo si connette al Database per estrarre tramite una query i cutId della tabella vw_Cut
// Il seguente metodo si connette al DB per estrarre tramite una query i cutId della tabella vw_Cut
// aventi elementId e projectId che corrispondono a quelli passati come argomento
private static List<int> getListaCutIdO(int elementId, int projectId)
{
@@ -548,8 +536,7 @@ namespace ib.essetre.integration.egaltech
return ListaCutId;
}
//Ottiene la lunghezza della barra ed è usato solo nel caso Produzione perché nelle tabelle
//del caso Ordine non c'è la colonna "l"
//Ottiene la lunghezza della barra nel caso Produzione (colonna "l")
private static int getBarLengthP(int patternId, int productionId)
{
int barLength = 0;
@@ -571,42 +558,27 @@ namespace ib.essetre.integration.egaltech
return barLength;
}
//private static int getBarLengthO(int elementId, int projectId)
//{
// int barLength = 0;
// // SISTEMARE: vw_Element non ha l come vW_Pattern
// string sqlBarLength = "SELECT l FROM dbo.vw_Element WHERE elementId = " + elementId +
// "AND projectId = " + projectId;
// using (SqlConnection cn = new SqlConnection(Constants.ConnectionString))
// {
// cn.Open();
// SqlCommand sqlCommand = new SqlCommand(sqlBarLength, cn);
// SqlDataReader reader = sqlCommand.ExecuteReader();
// while (reader.Read())
// {
// barLength = Convert.ToInt16(reader["l"]);
// }
// cn.Close();
// }
// return barLength;
//}
public static bool AreTablesTheSame(DataTable tbl1, DataTable tbl2)
//Ottiene la lunghezza della barra nel caso Ordine (colonna "length", ovvero la lunghezza della singola trave)
//a cui aggiungiamo un valore fisso (es. 2000)
private static int getBarLengthO(int elementId, int projectId)
{
if (tbl1.Rows.Count != tbl2.Rows.Count || tbl1.Columns.Count != tbl2.Columns.Count)
return false;
int barLength = 0;
for (int i = 0; i < tbl1.Rows.Count; i++)
string sqlBarLength = "SELECT length FROM dbo.vw_Element WHERE elementId = " + elementId +
"AND projectId = " + projectId;
using (SqlConnection cn = new SqlConnection(Constants.ConnectionString))
{
for (int c = 0; c < tbl1.Columns.Count; c++)
cn.Open();
SqlCommand sqlCommand = new SqlCommand(sqlBarLength, cn);
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read())
{
if (!Equals(tbl1.Rows[i][c], tbl2.Rows[i][c]))
return false;
barLength = Convert.ToInt16(reader["length"]);
}
cn.Close();
}
return true;
return barLength + 2000;
}
}
@@ -51,7 +51,6 @@
<Compile Include="BTL.cs" />
<Compile Include="CallBack.cs" />
<Compile Include="Constants.cs" />
<Compile Include="ErrorManager.cs" />
<Compile Include="Generator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>