Aracılığıyla paylaş


Bağlama ve veri tablosu Valued parametreler ve sütun değerleri Aktarım

Sunucuya geçirilir gibi diğer parametreleri tablo değerli parametreleri bağlı olması gerekir. Uygulama tablo değerli parametreleri bu bağlar diğer parametreleri aynı şekilde bağlar: kullanarak SQLBindParameterya da eşdeğeri aramalar için SQLSetDescFieldveya SQLSetDescRec. Sunucu verileri için tablo değerli bir parametre sql_ss_table türüdür. c tipi, sql_c_default veya SQL_C_BINARY olarak belirtilebilir.

De SQL Server 2008veya daha sonra yalnızca giriş tablo valued parametreler desteklenir. Bu nedenle, sql_desc_parameter_type SQL_PARAM_INPUT dışında bir değere ayarlama girişimi ile sqlstate sql_error döndürür = HY105 ve "geçersiz parametre türü" mesajı.

Tüm tablo değerli parametresi sütunları sql_ca_ss_col_has_default_value özniteliğini kullanarak varsayılan değerler atanabilir. Tek tek parametre tablo değerli sütun değerleri, ancak cant atanabilir varsayılan değerleri ayarlamak içinde kullanarak StrLen_or_IndPtrile SQLBindParameter. Tablo değerli parametreleri bir bütün olarak ayarlanamaz bir varsayılan değer ayarlamak içinde kullanarak StrLen_or_IndPtrile SQLBindParameter. Bu kuralları takip edemiyorum, SQLExecuteya SQLExecDirectsql_error döndürür. Tanılama kaydı sqlstate ile oluşturulacak 07S01 ve mesaj = "parametresi için varsayılan parametrenin geçersiz kullanımı <p>", nerede <p> tvp sorgu deyimi sıralı olduğunu.

Tablo valued parametre bağlama sonra uygulamanın ardından her parametre tablo değerli sütun bağlamanız gerekir. Bu, uygulamanın ilk görüşmeleri yapmak için SQLSetStmtAttrsql_sopt_ss_param_focus tablo değerli bir parametre sıra sayısı için. Daha sonra uygulama tarafından aşağıdaki yordamları çağrıları tablo değerli parametresi sütunları bağlar: SQLBindParameter, SQLSetDescRec, ve SQLSetDescField. sql_sopt_ss_param_focus 0 geri yüklemeler için her zamanki etkisi ayarı SQLBindParameter, SQLSetDescRec, ve SQLSetDescFieldnormal üst düzey parametreleri faaliyet içinde.

Gerçek veri gönderilen veya tablo değerli parametresi için kendisinden alınan, ancak veri gönderilen ve alınan her kurucu sütunlarından biri için. Parametre tablo değerli parametrelerini sözde sütun olduğundan SQLBindParametergibi diğer veri türlerinden daha farklı özellikleri başvurmak için kullanılır:

Parametre

Ilgili özniteliği sütunları da dahil olmak üzere, non–table değerli parametre türleri

Tablo değerli parametreler için ilgili özniteliği

InputOutputType

sql_desc_parameter_type IPD içinde.

Tablo değerli parametresi sütunları için bu ayarı tablo değerli parametresi için kendisi ile aynı olmalıdır.

sql_desc_parameter_type IPD içinde.

Bu SQL_PARAM_INPUT olması gerekir.

ValueType

sql_desc_type, SQL_DESC_CONCISE_TYPE apd içinde.

sql_desc_type, SQL_DESC_CONCISE_TYPE apd içinde.

Bu sql_c_default veya SQL_C_BINARY olmalıdır.

ParameterType

sql_desc_type, SQL_DESC_CONCISE_TYPE IPD içinde.

sql_desc_type, SQL_DESC_CONCISE_TYPE IPD içinde.

Bu sql_ss_table olması gerekir.

ColumnSize

sql_desc_length veya SQL_DESC_PRECISION IPD içinde.

Bu değerine bağlı ParameterType.

SQL_DESC_ARRAY_SIZE

Ayrıca parametre odağı tablo değerli parametresi ayarlandığında SQL_ATTR_PARAM_SET_SIZE kullanılarak ayarlanabilir.

Tablo değerli bir parametre için parametre tablo değerli sütun arabelleklerindeki satır sayısı budur.

DecimalDigits

SQL_DESC_PRECISION veya sql_desc_scale IPD içinde.

Kullanılmamış. Bu 0 olmalıdır.

Bu parametre yoksa 0, SQLBindParametersql_error döner ve tanılama kaydı sqlstate ile oluşturulacak = HY104 ve "geçersiz duyarlık veya ölçek" mesajı.

ParameterValuePtr

sql_desc_data_ptr apd içinde.

SQL_CA_SS_TYPE_NAME.

Bu saklı yordam çağrıları için isteğe bağlı ve null olabilir gerekli değildir Eğer belirtilen. sql deyimleri için yordam çağrıları değildir belirtilmelidir.

Bu parametre, uygulama değişken satır bağlama kullanıldığında, bu tablo değerli parametre tanımlamak için kullanabileceğiniz benzersiz bir değer olarak da hizmet vermektedir. Daha fazla bilgi için bkz: "değişken tablo Valued parametre satır bağlama" bölümünde, bu konunun ilerleyen bölümlerinde.

Ne zaman bir tablo değerli parametre türü adı belirtilen tarih aramak için SQLBindParameter, Unicode değeri, hatta ANSI uygulamaları oluşturulan uygulamalar olarak belirtilmelidir. Parametre için kullanılan değeri StrLen_or_IndPtrsql_nts veya sizeof(WCHAR) tarafından çarpılan adı dize uzunluğu olmalıdır.

BufferLength

sql_desc_octet_length apd içinde.

Tablo değerli parametre türü adı bayt cinsinden uzunluğu.

Tablo değerli parametre türü adı gerekli değildir, bu tür adı sonlandırıldı null olduğunda sql_nts veya 0 olabilir.

StrLen_or_IndPtr

sql_desc_octet_length_ptr apd içinde.

sql_desc_octet_length_ptr apd içinde.

Tablo değerli parametreler için veri uzunluğu yerine satır sayısı budur.

İki veri aktarım modlarını için tablo değerli parametreler desteklenir: Sabit satır bağlama ve değişken satır bağlama.

Sabit Tablo Valued parametre satır bağlama

Sabit satır bağlama için bir uygulama arabellekleri (veya arabellek dizi) ayırdığı tüm olası giriş sütun değerleri için yeterince büyük. Uygulama aşağıdakileri yapar:

  1. Tüm parametreleri kullanarak bağlar SQLBindParameter, SQLSetDescRec, ya SQLSetDescFieldçağrı.

    1. SQL_DESC_ARRAY_SIZE, her tablo değerli parametre için transfer edilebilir bir satır sayısı ayarlar. Bu yapılabilir SQLBindParameterçağrısı.
  2. Aramalar SQLSetStmtAttrher tablo değerli parametre sıra sayısı için sql_sopt_ss_param_focus için.

    1. Her tablo değerli parametre için parametre tablo değerli sütun kullanarak bağlar SQLBindParameter, SQLSetDescRec, ya SQLSetDescFieldçağrı.

    2. Varsayılan değerlere sahip olan her parametre tablo değerli sütun için çağrı SQLSetDescFieldsql_ca_ss_col_has_default_value 1 olarak ayarlamak için.

  3. Aramalar SQLSetStmtAttrsql_sopt_ss_param_focus 0 olarak ayarlamak için. Bu önce yapılması gereken SQLExecuteya SQLExecDirectdenir. Aksi takdirde sql_error döner olduğunu ve tanılama kaydı sqlstate ile oluşturulan = HY024 ve "geçersiz öznitelik değeri, (yürütme süresi sıfır olmalıdır) sql_sopt_ss_param_focus" mesajı.

  4. Ayarlar StrLen_or_IndPtrya da sql_desc_octet_length_ptr ayarlamak için hiçbir satır veya satır bir sonraki çağrı transfer edilecek tablo değerli bir parametre için SQLExecuteveya SQLExecDirecttablo valued parametre satır varsa. StrLen_or_IndPtrveya (tablo valued parametre kurucu sütun NULL olabilecek olsa) tablo değerli parametreleri NULL olmayan gibi sql_desc_octet_length_ptr için bir tablo valued parametre sql_null_data için ayarlanamaz. Bu geçersiz bir değere ayarlanırsa, SQLExecuteveya SQLExecDirectsql_error ve tanılama kaydı sqlstate ile oluşturulan döndürür HY090 ve mesaj = "parametresi için geçersiz dize veya arabellek uzunluğu <p>", burada p parametre sayısı.

  5. Calls SQLExecute or SQLExecDirect.

Parametre tablo değerli sütun değerleri ise adet geçirilebilir giriş StrLen_or_IndPtrsql_len_data_at_exec için ayarlanır (length) veya sütun sql_data_at_exec. Bu diziler parametreler kullanıldığında değerleri için parçalar halinde geçen benzer. Tüm yürütme sırasında veri parametreleri gibi SQLParamDatasürücü için; veri isteyen dizinin satır göstermez uygulama bu dikkat çekmek gerekir. Uygulamanın hangi değerleri sürücü ister sipariş durumuyla ilgili yapamazsınız.

Değişken tablo Valued parametre satır bağlama

Değişken satır bağlama, satır toplu yürütülmesi sırasında aktarılır ve uygulama satır sürücüye istek üzerine geçirir. Bu veri yürütme tek tek parametre değerleri için benzer. Değişken satır bağlama için uygulama aşağıdakileri yapar:

  1. Parametreleri ve önceki bölümde, "Sabit Tablo Valued parametre satır bağlama" 1-3 adımda açıklandığı gibi tablo değerli parametresi sütunları bağlar.

  2. Ayarlar StrLen_or_IndPtrya da sql_desc_octet_length_ptr için sql_data_at_exec yürütme zaman geçirilecek olan tablo değerli parametreler için. İkisi de ayarlanırsa, parametre önceki bölümde açıklandığı şekilde işlenir.

  3. Calls SQLExecute or SQLExecDirect. Bu varsa herhangi bir SQL_PARAM_INPUT veya SQL_PARAM_INPUT_OUTPUT parametrelerin veri yürütme gibi parametreleri ele sırasında veri sql_need_data döndürür. Bu durumda, uygulama aşağıdakileri yapar:

    • Calls SQLParamData. Bu döner ParameterValuePtrdeğeri için veri yürütme parametresi ve dönüş kodu, sırasında veri sql_need_data. Tüm parametre veri geçirilen zaman sürücüye, SQLParamDatasql_success, SQL_SUCCESS_WITH_INFO veya sql_error döndürür. Yürütme sırasında veri parametreleri, ParameterValuePtr, sql_desc_data_ptr alan tanımlayıcısı ile aynı olduğu, benzersiz olarak tanımlayan bir değer gerekli bir parametre için bir simge kabul edilebilir. Bu "token" uygulamadan sonra sırt-e doğru uygulamanın yürütülmesi sırasında geçirilen sürücü bağlama zaman geçirilir.
  4. Tablo valued parametre satır varsa boş tablo değerli parametreler için parametre tablo değerli satır veri göndermek için bir uygulama çağrısı SQLPutDataile StrLen_or_Indayarlamak için ayarla.

    BOŞ olmayan TVPs için bir uygulama:

    • Ayarlar Str_Len_or_Induygun değerlere, tüm parametre tablo değerli sütun ve veri arabellekleri için yürütme sırasında veri parametreleri olmak olan tablo değerli parametresi sütunları doldurur. Benzer bir şekilde yürütme sırasında veri tablo değerli parametresi sütunları kullanabilirsiniz o da sıradan parametreleri geçirilebilir adet sürücüsüne.

    • Aramalar SQLPutDataile Str_Len_or_Indsunucuya gönderilecek satır sayısını ayarla. SQL_DESC_ARRAY_SIZE ya da ayarlamak için aralığı 0 dışında herhangi bir değer, bir hatadır ve sqlstate HY090, "Geçersiz dize veya arabellek uzunluğu" ileti dönecektir. 0, tüm satırlar gönderildikten ve daha fazla veri tablo değerli bir parametre için (Bu listede ikinci madde Madde de belirtildiği gibi) olduğunu gösterir. Ayarlamak (Bu listede ilk madde madde açıklandığı gibi) veriler tablo değerli bir parametre için sürücü ister ilk kez kullanılmalı.

  5. Tüm satırlar gönderildikten zaman arar SQLPutDataile tablo değerli parametresi için bir Str_Len_or_Inddeğeri 0, sonra adım 3a yukarıdaki gelirleri.

  6. Aramalar SQLParamDatatekrar. Yürütme sırasında veri parametreleri tablo değerli parametresi sütunları arasında varsa, bu değeri tarafından tanımlanacak ValuePtrPtrtarafından döndürülen SQLParamData. Tüm sütun değerleri varsa, SQLParamDatatekrar dönecektir ParameterValuePtrdeğeri tablo valued parametre ve uygulamanın başlar yine.

Ayrıca bkz.

Kavramlar

Tablo Valued Parametreler (odbc)