आप SqlParameter
को कैसे सेट कर रहे हैं? ? आपको SqlDbType
सेट करना चाहिए SqlDbType.DateTime
. के लिए संपत्ति और फिर DateTime
. पास करें सीधे पैरामीटर पर (एक स्ट्रिंग में कनवर्ट न करें, आप तब समस्याओं का एक गुच्छा मांग रहे हैं)।
आपको डीबी में मूल्य प्राप्त करने में सक्षम होना चाहिए। यदि नहीं, तो इसे कैसे करें इसका एक बहुत ही सरल उदाहरण यहां दिया गया है:
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();
}
}
}
मुझे लगता है कि यहां इस मुद्दे का हिस्सा यह है कि आप चिंतित हैं कि तथ्य यह है कि यूटीसी में समय SQL सर्वर को नहीं बताया जा रहा है। इसके लिए, आपको ऐसा नहीं करना चाहिए, क्योंकि SQL सर्वर यह नहीं जानता है कि एक विशेष समय किसी विशेष लोकेल/समय क्षेत्र में है।
यदि आप UTC मान को संग्रहीत करना चाहते हैं, तो इसे SQL सर्वर में भेजने से पहले इसे UTC में परिवर्तित करें (जब तक कि आपके सर्वर का वही समय क्षेत्र न हो जो क्लाइंट कोड DateTime
उत्पन्न करता है) , और फिर भी, यह एक जोखिम है, आईएमओ)। SQL सर्वर इस मान को संग्रहीत करेगा और जब आप इसे वापस प्राप्त करेंगे, यदि आप इसे स्थानीय समय में प्रदर्शित करना चाहते हैं, तो आपको इसे स्वयं करना होगा (जो कि DateTime
struct आसानी से करेगा)।
यह सब कहा जा रहा है, यदि आप रूपांतरण करते हैं और फिर परिवर्तित UTC तिथि (वह तिथि जो ToUniversalTime
पर कॉल करके प्राप्त की जाती है) पास करते हैं। विधि, एक स्ट्रिंग में कनवर्ट करके नहीं) संग्रहीत कार्यविधि में।
और जब आपको मान वापस मिल जाए, तो ToLocalTime
. पर कॉल करें स्थानीय समय क्षेत्र में समय प्राप्त करने की विधि।