سؤال

أحاول تشغيل استعلام معلمة مقابل قاعدة بيانات DB2 من .NET باستخدام برنامج تشغيل ODBC للوصول إلى العميل باستخدام الكود التالي:

var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (@LAT)", db2Conn);
db2Cmd.Parameters.AddWithValue("@LAT", insertValue);
Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());

عند تنفيذها ، OdbcException هذا خطئ:

خطأ [42S22] [IBM] [ISERIES Access ODBC DRIVER] [DB2 UDB] SQL0206 - COLUMNLATLAT NOT في الجداول المحددة.

internets يبدو أنه يعني أن الاستعلامات المعلمة مدعومة بواسطة برنامج تشغيل ODBC للوصول إلى العميل ، ولكن يبدو أن هذا الخطأ يشير إلى خلاف ذلك. هل هناك أي خطأ في الكود الموفر؟

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

المحلول

هل حاولت استخدام؟ بصفته العنصر النائب بدلاً من lat؟

var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (?)", db2Conn);

db2Cmd.Parameters.AddWithValue("LAT", insertValue);

Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());

هذا هو ما يتطلبه الوصول إلى MS عند استخدام ODBCConnection / ODBCCommand.

تحتاج فقط إلى التأكد من أن عبارات المعلمات الخاصة بك. لا يبدو أن المعلمة الأولى التي تم تمريرها إلى AddWithValue () مهمة ، على الرغم من أنني من خلال الاتفاقية تجعلها نفس اسم الحقل.

نصائح أخرى

إذا كنت أخمن بشكل صحيح فيما تحاول القيام به ، فأنت تريد القيام بذلك:

تريد إضافة معلمة واحدة ، وتحتاج إلى تغيير قيمة المعلمة في الحلقة.

var db2Cmd = new OdbcCommand("INSERT INTO presnlats (LAT) VALUES (@Lat)", db2Conn);
db2Cmd.Parameters.AddWithValue("@Lat", 0);


for (int j = 0; j < reader.FieldCount; ++j)
{
   db2Cmd.Parameters["@Lat"].Value = reader[j];
   Console.Out.WriteLine(db2Cmd.ExecuteNonQuery());
}

وأضاف

لديك واحد فقط عنصر نائب (lat) للمعلمة الخاصة بك في الأمر ، لذلك يجب عليك إضافة معلمة واحدة فقط. يقوم الرمز الخاص بك بإضافة معلمة جديدة لكل كائن في القارئ. لن يتم تسمية أي من هذه المعلمات "lat" إلا إذا كان قارئك يعيد قيمة @lat.

ما زلت إيجابيًا جدًا أنك بحاجة إلى معلمة واحدة (lat) وتحتاج إلى تعديل قيمة المعلمة في الحلقة.

توضيح بناء الجملة لاستخدام الاستعلامات المعتمدة ، ضع في اعتبارك هذا البيان:

cmd.CommandText = "أدخل في الشخص (FirstName ، lastName) القيم (fname ، lname)

في البيان أعلاه ، @fname و @lname ليست معلمات. هم أصحاب نائبة للمعلمات.

تحتاج بعد ذلك إلى إضافة المعلمات بشكل صريح باستخدام القواعد التالية:

  • يجب تسمية المعلمات تمامًا مثل العناصر النائبة
  • يجب إضافة الباراتين بالترتيب الصحيح.

لذلك سيكون مثال أكثر كاملاً

cmd.CommandText = "أدخل في الشخص (FirstName ، lastName) القيم (fname ، lname)

cmd.parameters.addwithValue ("@fname" ، "David") ؛ // هذا الخط ، في هذا السياق ، يقول "إعادة حساب حامل المعلمة من السطر السابق مع هذه المعلمة الفعلية. .

ثم إذا كان لدي dataReader يحتوي على مجموعة من الأسماء ، فيمكنني تعيين القيمة من القارئ إلى قيمة المعلمة.

بينما (myreader.read ()) {cmd.parameters ["@fname '] ؛ cmd.executenonquery () ؛

}

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top