Jag ska hämta data från en dbase tabell, men jag får åäö konstiga (tex SlÕnbõrsvõgen) och skulle vilja fixa encodingen. Jag har provat ett par olika men får felet "Det går inte att hitta installerbar ISAM." Jag kör som exempel denna kod och det fungerar bra när det gäller åäö Jag får samma resultat om jag importerar tabellen i access 2007. Databastabellen tillhör ett SPCS-ekonomisystem. Använd dig av OLE Drivern för FoxPro så kommer det att ordna sig. SPCS använder sig av FoxPro inte DBASE. Vi ska bara läsa i databasen. Hur ser din connectionstring ut mot SPCS databasen? Tackar så mycket!Character encoding i C# mot Dbase
Hur ska man göra?
Kan man fixa det i ett senare skede?
<code>
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\projekt\\bhc;Extended Properties=dBASE IV;User ID=;Password=;Character
Encoding=Windows-1252;";
OleDbCommand com = new OleDbCommand();
com.CommandText = "SELECT DOKNR, DATUM1, DATUM2, SALDO, NAMN, POSTADR, POSTNR,
ORT FROM OOF WHERE SALDO > 0 AND DATUM2 > #" + lastInvoiceDate.Value.Date +"#";
com.Connection = con;
OleDbDataAdapter ad = new OleDbDataAdapter();
DataSet ds = new DataSet();
ad.SelectCommand = com;
ad.Fill(ds);
invoicesGrid.DataSource = ds.Tables[0];
</code>
Jobbar i MS C# 2005 Express Edition, .NET 2.0Sv: Character encoding i C# mot Dbase
public int CountRows()
{
OleDbConnection odbc = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:\test.dbf;" +
"Extended Properties=dBase III");
odbc.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = odbc;
string sqlCountRows =
"SELECT (*) " +
"FROM [test.dbf]";
command.CommandText = sqlCountRows;
int rowCount = (int)command.ExecuteScalar();
odbc.Close();
return rowCount;
}
Sv:Character encoding i C# mot Dbase
Går det inte att välja encoding i kopplingsträngen?Sv: Character encoding i C# mot Dbase
Ska du använda dig av systemets databaser ska man egentligen använda deras API och inte gå direkt mot databaserna. Det fungerar säker bra om du bara hämtar data men ändrar du i tabellerna är det stor risk att du krashar index. Sv:Character encoding i C# mot Dbase
Är det Visual Foxpro som man ska använda som OLE driver? Annars så ärvad jag kan se FoxPro och Dbase desamma.
I Vilket fall som helst så verkar den inte hitta data när jag använder visual foxpros driver.Sv: Character encoding i C# mot Dbase
Jag kör själv med OLE för Visual FoxPro och hämtar data från databaserna i SPCS.
Men när jag ska lägga in något används APIet.
När jag använde DBase drivern hade jag samma problem som du med åäö, efter byte till foxpro löste sig alla problem.
<code>
strOleDBconn = "Provider=vfpoledb.1;Data Source = " + ftgKatalog + ";Collating Sequence=general;";
</code>
Så ser min ut med ftgKatalog pekandes på datakatalogen
Här hämtar jag en artikel med mera:
<code>
private void checkArtikel(string artnr)
{
string query = "SELECT ARTNR, BENAEMN FROM ART WHERE ARTNR =?";
try
{
OleDbConnection conn = new OleDbConnection(strOleDBconn);
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
adapter.SelectCommand.Parameters.Add("p1", OleDbType.VarChar).Value = artnr;
DataSet ds = new DataSet();
adapter.Fill(ds, "ART");
if (ds.Tables[0].Rows.Count == 0)
{
lblBottom.Text = "Artikeln ej funnen!";
txtArtnr.Focus();
conn.Close();
return;
}
else
{
DataTable dt = ds.Tables[0];
DataRow dr = dt.Rows[0];
artikelnummer = dr["ARTNR"].ToString().TrimEnd();
benaemn = dr["BENAEMN"].ToString().TrimEnd();
conn.Close();
lblBottom.Text = "Senast sökta artikelnr: " + artikelnummer;
txtArtnr.Text = "";
txtArtnr.Focus();
printEtikett.PrinterSettings.PrinterName = ConfigurationManager.AppSettings["Skrivare"].ToString();
printEtikett.DefaultPageSettings.PrinterSettings.Copies = (short)txtAntal.Value;
printEtikett.DefaultPageSettings.Landscape = false;
// printEtikett.Print();
printPreview.Show();
}
}
catch (OleDbException ex)
{
MessageBox.Show(ex.ToString(), "Fel", MessageBoxButtons.OK);
}
}
</code>Sv:Character encoding i C# mot Dbase
Jag måste ändra till en parameterfråga enligt ditt sätt så fungerade det hela.
/Per-Erik