Varför skickar du in en sträng när det är ett datum? En vild gissning är att det kan fungera bättre med ett datum... Det är tydligen mer komplicerat än så. Det är webbservern som gör om datumet till amerikanskt i alla fall och sedan på oracle-sidan så verkar konverteringen gå fel ytterligare. Så summa summarum skickas datumet fel även om vi skickar som sträng, därav förstod vi att det är på oracel-sidan. Hur menar du att det blir fel? Konverterar du datumet till en sträng i proceduren i databasen och det blir fel, eller är det fel datum som kommer fram till proceduren? Felet är att när jag ansluter mot oracle så känner den av vad jag har för landsinställningar. Är det min pc eller min 2003server som ansluter så ställer den om nls_lang och därigenom konverterar även datumformatet som skickas över. Konverteringen av datum/tid sker inuti ODP.NET som jag ser det. Så länge du jobbar med datum borde inställningarna inte påverka, så jag förstår fortfarande inte problemet. För att det ska bli problem antar jag att du konverterar datumet till text, frågan är var du gör det och varför. Spelar ingen roll om jag konverterar datumet eller inte. Det är oracle som ställer om NLS_LANGUAGE beroende på vilket os du har som kallar på proceduren helt enkelt.. Jag lyckas tydligen inte formulera frågan speciellet bra... =/Oracle procedur, datum och webbserver
IFormatProvider culture = new System.Globalization.CultureInfo("sv-SE", true);
selecteddate = DateTime.Parse(selecteddate, culture).ToString();
try
{
myConnection.Open();
OracleCommand cmd = new OracleCommand("F_SUB_ROUTEX_JOB", myConnection);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter prm1 = new OracleParameter("vd_datum_in", OracleType.DateTime);
prm1.Direction = ParameterDirection.Input;
prm1.Value = "2007-05-30"; // selecteddate;
cmd.Parameters.Add(prm1);
OracleParameter prm2 = new OracleParameter("vs_tidning_id_in", OracleType.VarChar);
prm2.Direction = ParameterDirection.Input;
prm2.Value = "KV";
cmd.Parameters.Add(prm2);
OracleParameter prm3 = new OracleParameter("vn_seqnr_out", OracleType.Number);
prm3.Direction = ParameterDirection.Output;
cmd.Parameters.Add(prm3);
// adderar posten
cmd.ExecuteNonQuery();
// returdata
returnData = cmd.Parameters["vn_seqnr_out"].Value.ToString();
}
catch (Exception ex)
{
BaseClass.SendToLog(ex, "RunSelection", ex.Message.ToString(), true);
}
I web.config står följande
<code>
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="sv-SE"
uiCulture="sv-SE" />
</code>
Den här koden ger ett datum lokalt och på webbservern. Lokalt komer det gå bra, men på webbservern kommer det bli 30-MAY-07. Servern är amerikansk men inställd på att vara svensk. Har ni något bra förslag på vart jag skall lösa mitt dilemma? Jag vill att proceduren får det datum jag angett och inte någon formatering. Att ställa om parametertypen till varchar känns som lågvattenmärke.
Sv: Oracle procedur, datum och webbserver
prm1.Value = new DateTime(2007, 05 ,30);
/JohanSv:Oracle procedur, datum och webbserver
Som du ser är den parametern bortremmad just i detta exempel, men den använder datetime där som inparameter som du ser. Sv: Oracle procedur, datum och webbserver
/JohanSv:Oracle procedur, datum och webbserver
Sv: Oracle procedur, datum och webbserver
/JohanSv:Oracle procedur, datum och webbserver
Sv: Oracle procedur, datum och webbserver
Ett datum är ett datum oberoende av språkinställningar. För att det ska formateras måste det konverteras till text. Så när ditt problem uppstår antar jag att datumet blivit konverterat (antingen av dej eller automatiskt någonstans)!? Vad gör du när felet uppstår? Hur konstaterar du att datumet är fel, du konverterar ju datumet till text då?
/Johan