سؤال

أنا الاتصال بنجاح Oracle DB 10g مع Microsoft ODBC Oracle السائق.

العادية الاستعلامات بدون معلمات تعمل بشكل جيد ، ولكن استعلامات بمعلمات تتصرف كما لو المعلمات لا يحصلون على تمرير.

ex.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

هنا ما كان سلسلة الاتصال تبدو مثل:

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

وأنا مضيفا المعلمات إلى ODBC أمر مثل هذا:

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

يغفر partialy نسخها إلى حد ما pseuedo رمز.

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

المحلول

قليلا من necromancing هنا ، ولكن منذ أنا فقط كافح مع مشكلة مماثلة, هنا هو كيف يعمل مع ODBC-سائق Centura SQLBase:

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

هذا البحث في "الطاولة" على السجلات مع قيمة 12345 في "searchInt" و تاريخ اليوم في "serachDat".
الأشياء ملاحظة:

  • المعلمات يتم وضع علامة ? في أمر SQL
  • المعلمات بحاجة إلى أي اسم ، ولكن الموقف (الصحيح نوع) المهم

نصائح أخرى

ODBC المعلمات (تميزت الرمز ?) لا بد من موقف ، بحيث يكون لديك للتأكد من أنه يمكنك إضافة OdbcParameters في الترتيب الصحيح.اسمهم ثم غير مهم ، ولكن أود أن أقترح paramName, دون @ وهو SQL Server (أو بالأحرى مايكروسوفت) اسم محدد الشكل.

هل يمكن أيضا محاولة استخدام أوراكل المعلمة الشكل الذي ينبغي أن تكون معترف بها من قبل Microsoft ODBC Oracle سائق من شأنها أن تسمح لك الربط بالاسم بدلا من ذلك (ليس 100% متأكد من هذا, على الرغم من) :

  • محل ? قبل :paramName في الاستعلام الخاص بك.
  • اسم المعلمة paramName.

وحاول استخدام ": paramName" بدلا من "paramName".

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