كيفية نقل المتغير إلى عبارة SQLCommand وإدراجها في جدول قاعدة البيانات

StackOverflow https://stackoverflow.com/questions/4056872

سؤال

أنا أكتب برنامجًا صغيرًا في C# يستخدم SQL لتخزين القيم في قاعدة بيانات في وقت التشغيل بناءً على إدخال المستخدم.

المشكلة الوحيدة هي أنه لا يمكنني معرفة بناء جملة SQL الصحيح لتمرير المتغيرات إلى قاعدة البيانات الخاصة بي.

private void button1_Click(object sender, EventArgs e)
    {
        int num = 2;

        using (SqlCeConnection c = new SqlCeConnection(
            Properties.Settings.Default.rentalDataConnectionString))
        {
            c.Open();
            string insertString = @"insert into Buildings(name, street, city, state, zip, numUnits) values('name', 'street', 'city', 'state', @num, 332323)";
            SqlCeCommand cmd = new SqlCeCommand(insertString, c);
            cmd.ExecuteNonQuery();
            c.Close();
        }

        this.DialogResult = DialogResult.OK;
    }

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

في وقت التشغيل أحصل على هذا الخطأ:

A parameter is missing. [ Parameter ordinal = 1 ]

شكرًا

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

المحلول

أضف معلمة إلى الأمر قبل تنفيذها:

cmd.Parameters.Add("@num", SqlDbType.Int).Value = num;

نصائح أخرى

لم تقدم قيمة ل @ المعلمة في بيان SQL. ال @ يشير الرمز إلى نوع من العنصر النائب حيث ستجتاز قيمة.

استخدم Sqlparameter يظهر كائن مثل في هذا المثال لتمرير قيمة إلى هذا العنصر النائب/المعلمة.

هناك العديد من الطرق لإنشاء كائن معلمة (عمليات حمولة مختلفة). طريقة واحدة ، إذا اتبعت نفس النوع من المثال ، هي لصق الكود التالي بعد إعلان كائن الأمر الخاص بك:

        // Define a parameter object and its attributes.
        var numParam = new SqlParameter();
        numParam.ParameterName = " @num";
        numParam.SqlDbType = SqlDbType.Int;
        numParam.Value = num; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 

        // Provide the parameter object to your command to use:
        cmd.Parameters.Add( numParam );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top