Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 222
  • Last Modified:

Avoid creating duplicates in a table without killing the process

I am EXTREMELY new to C#, and but have been sucessfully updating a program which reads an excel file and converts the data to XML.  
My problem is as I cycle thru the data, I don't want to add a duplicate "process" to my table.  The way it is currently setup, the table accepts duplicates and the records are the same except for the GUID value.  This is causing problems with the XML.

This is an excerpt of the code as it currently sits.  I tried adding a .Unique=true to the "Name" column in my table, but it throws an error that I don't know how to catch - and kills the program.  This is probably basic, but I am a real newbie. ;-)  

I am supposed to demo this process next week, and it would make me look really good if this issue was fixed - hence the high points!

//Setup table structure
table = data.Tables.Add("Process");
table.Columns.Add("Name", Type.GetType("System.String")).Unique = true;
table.Columns.Add("LocationID", Type.GetType("System.Int32"));
table.Columns.Add("ProcessID", Type.GetType("System.Int32")).AutoIncrement = true;
table.Columns.Add("GUID", Type.GetType("System.Guid")).Unique = true;



//define method to addProcess
private int addProcess(string process, int locationID)      {
DataRow row = data.Tables["Process"].NewRow();
row["Name"] = process;
row["LocationID"] = locationID;
row["GUID"] = System.Guid.NewGuid();
data.Tables["Process"].Rows.Add(row);

return (int) row["ProcessID"];
}

//Add processes to table
Excel.Range pcell = (Excel.Range) sheet.Cells[2, 3];
string process = getCellValue(pcell);
int processID = addProcess(process, locationID);


0
ImageryGrl
Asked:
ImageryGrl
  • 2
  • 2
1 Solution
 
KahhoeCommented:
Probably cause by duplicate name when you add a new row, modified you method as below to catch the error and promt the user. Of course you can choose to ignore it silently.

private int addProcess(string process, int locationID)    
{
     DataRow row = data.Tables["Process"].NewRow();
     row["Name"] = process;
     row["LocationID"] = locationID;
     row["GUID"] = System.Guid.NewGuid();

     try
    {
          data.Tables["Process"].Rows.Add(row);
     }
     catch(Exception e)
     {
          MessageBox.Show(e.Message);
     }

     return (int) row["ProcessID"];
}
0
 
ImageryGrlAuthor Commented:
Thanks Kahhoe,

What do I put in the Catch to handle it silently?  in this case, do I need to declare the "e"?
0
 
KahhoeCommented:
Depend on what you do on the duplicate data. When an exception is caught, the codes inside the try bracket are not actually executed. So if you leave the catch bracket blank then you just skip the duplicate data silently. The Exception e is optional. Just if you need to know what kind of exception have you caught. Or, if you want to do something on the data, you can just do it inside the catch bracket. As long as you do not pop up any message to the user, it is silent.. :-)
0
 
ImageryGrlAuthor Commented:
works like a charm!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now