Buna ilgili soru var:SqlCommand Parametreleri eklerken "SqlDbType" ve "size" ne zaman kullanılmalıdır?
What's the best method to pass parameters to SQLCommand?
Ama farklar ve farklı şekillerde ile herhangi bir sorun varsa öğrenmek isteyen.
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(SQL, conn))
{
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = Settings.Default.reportTimeout;
cmd.Parameters.Add("type", SqlDbType.VarChar, 4).Value = type;
cmd.Connection.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(ds);
}
//use data
}
Şimdi cmd parametreleri eklemek için çeşitli yollar vardır ve merak ediyorum en iyisidir:
cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";
cmd.Parameters.Add("@Name").Value = "Bob";
cmd.Parameters.AddWithValue("@Name", "Bob");
uzunluğunu sahip
Genellikle böyle bir yapı şey kullanın Varchars geçerken alan, daha sonra veritabanında değiştirilebilecek bir sihirli değeri olduğu için tercih edilmez. Bu doğru mu? Bu şekilde bir varchar iletirken herhangi bir soruna neden olur mu (performans ya da diğer), varsayılanı varchar (max) ya da veritabanı eşdeğerine varsayılan olarak kabul ediyorum. Bu işe yarayacak kadar mutluyum.
Yukarıda listelediğim üçüncü veya dördüncü seçenekleri kullanmam durumunda SqlDbType enum'un kaybı beni daha fazla ilgilendiren bir bölümdür. Bu işe yaramayacak durumlar var varchar varchar ile yanlış ya da tersi ya da belki de ondalık ile ilgili sorunlar hakkında hayal edebiliyorum sorunları hayal edebiliyorum ....
Veritabanı açısından I Uzunluğundan daha fazla değişiklik olasılığı daha fazladır; Tecrübelerime göre
Sorunuzu yanıtlamıyorken, 'SqlDataAdapter.Fill()' çağrılmadan önce bağlantıyı açmanız gerekmediğini ve bunu yapmamanın yararı olduğunu biliyorsunuzdur? –
@Rowland iyi bir nokta. Bunu benim kodumda bir gözetim olmasına rağmen biliyordum. Orijinal kod bloğunu bir adaptör değil SqlDataReader kullandığım bir yerden aldım (Bu bağlantıyı açmanız gerekecek mi?). Yaramaz kopyala/yapıştır programlama için budur :-). Şimdi kodumda sabitlendi. – PeteT
sadece şunu söyleyebilirim, çünkü bu "insanların bilmeyebileceği" belirsiz ipuçlarından biri " –