Saya mencoba menyimpan format waktu tanggal saat ini dari C # dan mengubahnya menjadi format tanggal SQL Server yyyy-MM-dd HH:mm:ss
sehingga saya dapat menggunakannya untuk UPDATE
kueri saya .
Ini adalah kode pertama saya:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
Output pada tanggal baik-baik saja, tetapi waktu selalu "12:00:00" jadi saya mengubah kode saya menjadi berikut:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Itu memberi saya kesalahan kompilasi ini:
FormatException tidak ditangani
Dan menyarankan saya perlu mengurai. Jadi saya mencoba melakukan ini ke kode saya sesuai penelitian saya di sini di StackOverflow:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
atau
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
Tapi itu memberi tahu saya bahwa itu adalah metode yang tidak valid untuk konteks tertentu. Saya mencoba mencari solusi untuk masalah saya dan saya telah terjebak selama dua jam sekarang. Saya masih agak baru di C #, dapatkah Anda membantu saya?
DateTime
atau Anda menyimpannya sebagai string? JugaToString
padaDate
akan menyiratkan bahwa waktu selalu12:00:00
DATETIME
dan kemudian Anda dapat menghindari melakukan semua ini mengkonversi bolak-balik ke dan dari representasi string!datetime
akan menjadi awal yang baik. Lebih baik lagi, mengapa Anda melewati server saat ini - ini memilikiGETDATE()
fungsi yang dapat dipanggil sepenuhnya di sisi server.Jawaban:
coba ini di bawah
sumber
yyyy-MM-dd
dari waktu, dan nama "ISO8601" untuk formulir di mana karakter pemisahnya adalah aT
. Tapi ya, kedua bentuk tersebut diubah secara implisit (dan benar) menjadi adatetime
.Menggunakan format tanggal waktu standar "s" juga akan memastikan kompatibilitas internasionalisasi (MM / dd versus dd / MM):
Opsi Lengkap: (kode: hasil sampel)
Didukung di .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Referensi:
DateTime.ToString
Metodesumber
Jawaban yang benar sudah diberikan "gunakan parameter". Memformat tanggal dan meneruskannya sebagai string ke SQL-Server dapat menyebabkan kesalahan karena bergantung pada pengaturan bagaimana tanggal diinterpretasikan di sisi server. Di Eropa, kami menulis '1.12.2012' untuk menunjukkan 1 Desember 2012, sedangkan di negara lain ini mungkin diperlakukan sebagai 12 Januari.
Saat mengeluarkan pernyataan langsung di SSMS saya menggunakan format
yyyymmdd
yang tampaknya cukup umum. Saya tidak menemui masalah pada berbagai instalasi yang saya kerjakan sejauh ini.Ada format lain yang jarang digunakan, yang agak aneh tetapi berfungsi untuk semua versi:
akan kembali pada tanggal 1 oktober 2013.
akan kembali pada 1 Oktober, 1:45:01
Saya sangat menyarankan untuk menggunakan parameter dan jangan pernah memformat kode SQL Anda sendiri dengan menempelkan fragmen pernyataan berformat homegrown. Ini adalah entri untuk injeksi SQL dan kesalahan aneh (memformat nilai float adalah masalah potensial lainnya)
sumber
Kode pertama Anda akan berfungsi dengan melakukan ini
sumber
Masalah Anda ada di properti "Tanggal" yang dipotong
DateTime
menjadi hanya tanggal. Anda bisa membuat konversi seperti ini:sumber
Jawaban yang saya cari adalah:
Saya juga belajar bahwa Anda dapat melakukannya dengan cara ini:
di mana myCountryDateFormat dapat diubah untuk memenuhi perubahan tergantung pada kebutuhan.
Harap perhatikan bahwa tag "Pertanyaan ini mungkin sudah memiliki jawaban di sini:" sebenarnya belum menjawab pertanyaan karena seperti yang Anda lihat menggunakan ".Tanggal", bukan menghilangkannya. Ini cukup membingungkan bagi pemrogram baru .NET
sumber
jika Anda ingin menyimpan tanggal sekarang dalam tabel sehingga Anda dapat menggunakan
atau berikan fungsi ini sebagai parameter
misalnya. 'update tblname set curdate = GETDATE () dimana colname = 123'
sumber
Mengapa tidak melewatkan string sama sekali:
sumber
Masalah Anda ada pada
Date
properti yang terpotongDateTime
hingga saat ini saja. Anda bisa membuat konversi seperti ini:sumber
Solusi lain untuk meneruskan DateTime dari C # ke SQL Server, terlepas dari pengaturan bahasa SQL Server
seharusnya Pengaturan Regional Anda menunjukkan tanggal sebagai dd.MM.yyyy (standar Jerman '104') lalu
meneruskan variabel C # datetime ke variabel tipe SQL Server Date, dengan mempertimbangkan pemetaan sesuai aturan "104". Tanggal Server Sql mendapat tttt-BB-hh
Jika Pengaturan Regional Anda menampilkan DateTime secara berbeda, kemudian gunakan pencocokan yang sesuai dari Tabel CONVERT SQL Server
lihat lebih lanjut tentang Aturan: https://www.techonthenet.com/sql_server/functions/convert.php
sumber
Saya pikir masalahnya adalah dua kutipan tunggal yang hilang.
Ini adalah sql yang saya jalankan ke MSSMS:
Seperti yang Anda lihat, ada dua tanda kutip tunggal, jadi kode Anda harus:
Gunakan tanda kutip tunggal untuk setiap string di MSSQL atau bahkan di MySQL. Saya harap ini membantu.
sumber
Mari gunakan kelas SqlDateTime bawaan
Tapi masih perlu memeriksa nilai null. Ini akan memunculkan pengecualian overflow
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
sumber
hanya Anda meletakkan "T" + DateTime.Now.ToLongTimeString () + '2015-02-23'
sumber
Jika Anda ingin memperbarui tabel dengan dateTime tersebut, Anda dapat menggunakan string sql Anda seperti contoh ini:
sumber
"
.sumber