سؤال

سأعترف بأنني قليلا من مبتدئ (على الرغم من أن التعلم بسرعة!) عندما يتعلق الأمر باستخدام استفسارات معلمة في C #، لذلك أنا فقط أطلز شيئا هنا، لكنني لا يبدو لي أن معرفة كيفية احصل على استعلام معلمات للعمل بالنسبة لي.

هنا مثال مبسط بكثير. إذا كانت هناك حاجة إلى مزيد من المعلومات، فأنا على استعداد بالتأكيد لتزويدها.

using (SqlCommand command = connection.CreateCommand())
{
    command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));
    command.Parameters.AddWithValue("@State", "MA");

    connection.Open();
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        count = Convert.ToInt32(reader[0]);
    }
    reader.Close();
    connection.Close();
}

باستخدام Profiler SQL Server، أستطيع أن أرى أن الاستعلام التالي يتم إصداره:

exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''@STATE''))',N'@STATE nvarchar(2)',@STATE=N'MA'

إذا قمت بتشغيل هذا الاستعلام مباشرة في SQL Server Management Studio، فسيتم إرجاعه 0. إذا، ومع ذلك، فقد قمت بتعديل الاستعلام مثل هذا:

exec sp_executesql N'SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE ''MA''))',N'@STATE nvarchar(2)',@STATE=N'MA'

وتشغيله، أحصل على عدد من 51 مرة أخرى، وهو صحيح.

ما أنا في عداد المفقودين هنا؟

هل كانت مفيدة؟

المحلول

لا تحتاج إلى اقتباسات حول State

نصائح أخرى

تحتاج فقط إلى إلغاء تحديد المعلمة الخاصة بك في عبارة SQL (نقلا عن نص يجعل SQL Server يعامله كحرفي). غير هذا:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE '@STATE'));

الى هذا:

command.CommandText = "SELECT COUNT (*) FROM Sites WHERE ((STATE LIKE @STATE));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top