Jak nastavujete SqlParameter
? Měli byste nastavit SqlDbType
vlastnost na SqlDbType.DateTime
a poté předejte DateTime
přímo na parametr (NEpřevádějte na řetězec, pak si koledujete o spoustu problémů).
Měli byste být schopni získat hodnotu do DB. Pokud ne, zde je velmi jednoduchý příklad, jak to udělat:
static void Main(string[] args)
{
// Create the connection.
using (SqlConnection connection = new SqlConnection(@"Data Source=..."))
{
// Open the connection.
connection.Open();
// Create the command.
using (SqlCommand command = new SqlCommand("xsp_Test", connection))
{
// Set the command type.
command.CommandType = System.Data.CommandType.StoredProcedure;
// Add the parameter.
SqlParameter parameter = command.Parameters.Add("@dt",
System.Data.SqlDbType.DateTime);
// Set the value.
parameter.Value = DateTime.Now;
// Make the call.
command.ExecuteNonQuery();
}
}
}
Myslím, že součástí problému je, že se obáváte, že skutečnost, že čas je v UTC, není přenášena na SQL Server. Za tímto účelem byste neměli, protože SQL Server neví, že určitý čas je v určitém národním prostředí/časovém pásmu.
Pokud chcete uložit hodnotu UTC, převeďte ji na UTC, než ji předáte SQL Server (pokud váš server nemá stejné časové pásmo jako klientský kód generující DateTime
a i tak je to riziko, IMO). SQL Server si tuto hodnotu uloží a až ji získáte zpět, pokud ji chcete zobrazit v místním čase, musíte to udělat sami (což DateTime
struct to snadno udělá).
Vše, co bylo řečeno, pokud provedete převod a poté předáte převedené datum UTC (datum, které se získá voláním ToUniversalTime
metodou, nikoli převodem na řetězec) do uložené procedury.
A až získáte hodnotu zpět, zavolejte ToLocalTime
metoda k získání času v místním časovém pásmu.