Saya mencoba menjalankan backup SQL melalui prosedur yang tersimpan melalui Dapper (sisa aplikasi saya menggunakan Dapper jadi saya lebih memilih untuk tetap menjalankan bagian ini melalui itu juga). Ini berfungsi dengan baik sampai CommandTimeout dijalankan.
using (var c = SqlConnection(connstring))
{
c.Open();
var p = new DynamicParameters();
// fill out p
c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}
Satu-satunya pengaturan CommandTimeout yang saya tahu ada di SqlCommand. Apakah ada cara untuk mengatur ini melalui Dapper?
Jawaban:
Ya, ada beberapa versi dari fungsi Execute. Satu (atau lebih) di antaranya berisi parameter commandTimeout:
public static int Execute(this IDbConnection cnn, string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
Diambil dari SqlMapper.cs
sumber
SqlConnection.ConnectionTimeout Property
tetapi dikatakan bahwa itu hanya baca. Saya akan membutuhkannya untuk beberapa program migrasi ubahsuaian. Membosankan untuk mengetiknya dengan setiap pernyataan.Contoh dari pertanyaan asli dengan jawaban yang diterima ditambahkan, jika ada yang menginginkannya. (Batas waktu disetel ke 60 detik):
using (var c = SqlConnection(connstring)) { c.Open(); var p = new DynamicParameters(); // fill out p c.Execute("xp_backup_database", p, commandTimeout: 60, commandType: CommandType.StoredProcedure); }
sumber
Tidak perlu menyetel waktu tunggu perintah untuk semua kueri / Panggilan Db. Anda dapat mengatur secara global seperti di bawah ini.
Dapper.SqlMapper.Settings.CommandTimeout = 0;
Anda dapat menginisialisasi properti statis ini pada pemuatan aplikasi atau dalam konstruktor kelas database.
Ini membantu dalam menghapus duplikasi, dan jika Anda memutuskan untuk mengubahnya nanti, Anda mengubahnya sekali.
sumber
Saya dapat memecahkan masalah saya menggunakan koneksi.Query mengatur batas waktu secara langsung
int timeOutInSeconds = 60; . . . result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
sumber