Hej Både OleDbConnection och DataTable implementerar IDisposable så du måste anropa Dispose på dem i ett finally block (eller använda using).Rätt skriven kod?
Håller på med lite hantering av Excelfiler via C#
Jag har skriven en kod för att hämta alla Blad som finns i en Excelfil.
Koden fungerar utmärkt. Men jag undrar om Klassen är "rätt" skriven, eller hade ni gjort på ett annat sätt. Vet att alla använder sin egna programmerings "stil", men det är alltid intressant att diskuttera detta.
Jag har inte lagt in något try block så det behöver ni inte anmärka.
class Sheets
{
private string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<source>;Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1\"";
private void convertConnString(string connString)
{
this.connString = this.connString.Replace("<source>", connString);
}
public String[] GetExcelSheetNames(string sourcefile)
{
convertConnString(sourcefile); //Konverterar anslutningsträng
OleDbConnection objConn = null;
DataTable dt = null;
objConn = new OleDbConnection(connString);
objConn.Open();
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null)
{
return null;
}
String[] excelSheets = new String[dt.Rows.Count];
int i = 0;
foreach (DataRow row in dt.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
return excelSheets;
}
MVH
AndersSv: Rätt skriven kod?
jag hade använt list<string> i stället för en string[] och properties istället för en metod för connectionsträngen. sen skulle jag antagligen inte returnera null heller bättre med en tom lista
nått i stil med
public class Sheets
{
private const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<source>;Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1\"";
private string ConnString;
private string ConnectionString
{
get { return connectionString.Replace("<source>", ConnString); }
}
public List<String> GetExcelSheetNames(string sourceFile)
{
ConnString = sourceFile;
OleDbConnection objConn = new OleDbConnection(ConnectionString);
objConn.Open();
DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
List<String> excelSheets = new List<string>();;
if (dt != null)
foreach (DataRow row in dt.Rows)
excelSheets.Add(row["TABLE_NAME"].ToString());
return excelSheets;
}
}Sv: Rätt skriven kod?