using() {}নীচে দেখানো অনুসারে (sic) ব্লক ব্যবহার করার সময় এবং ধরে cmd1নিলে যে প্রথম using() {}ব্লকের আওতার বাইরে চলে না , দ্বিতীয় ব্লকে বার্তাটি দিয়ে কেন ব্যতিক্রম ছড়িয়ে দেওয়া উচিত?
স্কেলপ্যারামিটারটি ইতিমধ্যে অন্য স্কেলপ্যারামিটার সংগ্রহ দ্বারা অন্তর্ভুক্ত
এর অর্থ কি এই যে ব্লক শেষে ধ্বংস হয়ে SqlParameterCollectionযাওয়ার পরে প্যারামিটারগুলি সহ ) - সংযুক্ত সংস্থানগুলি এবং / অথবা হ্যান্ডলগুলি cmd1প্রকাশিত হয় না?
using (var conn = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True"))
{
var parameters = new SqlParameter[] { new SqlParameter("@ProductId", SqlDbType.Int ) };
using(var cmd1 = new SqlCommand("SELECT ProductName FROM Products WHERE ProductId = @ProductId"))
{
foreach (var parameter in parameters)
{
cmd1.Parameters.Add(parameter);
}
// cmd1.Parameters.Clear(); // uncomment to save your skin!
}
using (var cmd2 = new SqlCommand("SELECT Review FROM ProductReviews WHERE ProductId = @ProductId"))
{
foreach (var parameter in parameters)
{
cmd2.Parameters.Add(parameter);
}
}
}
উল্লেখ্য: cmd1.Parameters.Clear করছেন () ঠিক আগে প্রথম থেকে শেষ বক্রবন্ধনী ব্যবহার () {} ব্লক ব্যতিক্রম (এবং সম্ভাব্য অপ্রীতিকর) থেকে আপনি সংরক্ষণ করতে হবে।
আপনার যদি পুনরুত্পাদন করার প্রয়োজন হয় তবে অবজেক্টগুলি তৈরি করতে নিম্নলিখিত স্ক্রিপ্টগুলি ব্যবহার করতে পারেন:
CREATE TABLE Products
(
ProductId int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
ProductName nvarchar(32) NOT NULL
)
GO
CREATE TABLE ProductReviews
(
ReviewId int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
ProductId int NOT NULL,
Review nvarchar(128) NOT NULL
)
GO