ďťż
 
SQL Server 2005: definiowanie własnego typu ďťż
 
SQL Server 2005: definiowanie własnego typu
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

SQL Server 2005: definiowanie własnego typu



RAM - 19-07-2006 00:45
SQL Server 2005: definiowanie własnego typu
  Napisałem w .NET własny typ (pniżej) którego chciałbym używać w SQLServerze.

[Serializable]
[StructLayout(LayoutKind.Sequential)]
[SqlUserDefinedType(Format.Native, Name="Płeć")]
public class Płeć : INullable
{
SqlBoolean płeć;
public Płeć()
{
płeć = SqlBoolean.Null;
}
public Płeć(SqlString s)
{
płeć = SqlBoolean.Null;
if (s != null && !s.IsNull)
{
char[] mk = s.ToString().Substring(0, 1).ToLower().ToCharArray
();
if (mk[0] == 'm' || mk[0] == 'k')
{
płeć = (mk[0] == 'm');
}
}
}
public override string ToString()
{
if (płeć.IsNull)
return "NULL";
return płeć.ToString();
}
public bool IsNull
{
get
{
return płeć.IsNull;
}
}
public static Płeć Null
{
get
{
return new Płeć();
}
}
public static Płeć Parse(SqlString s)
{
if (s == null || s.IsNull || s.Value.ToLower() == "null")
return Null;
Płeć p = new Płeć(s.ToString());
return p;
}
public SqlString Value
{
get
{
if (płeć.IsNull)
return "NULL";
return (płeć ? "m" : "k");
}
set
{
char[] mk = value.ToString().Substring(0, 1).ToLower
().ToCharArray();
if (mk[0] == 'm' || mk[0] == 'k')
płeć = (mk[0] == 'm');
else
throw new ArgumentException("Dozwolone wartości to 'm'
i 'k'");
}
}
}

Następnie dodałem assembly do bazy DemoSQLServer i utworzyłem typ:
CREATE TYPE Płeć EXTERNAL NAME [DemoSQLServer].[DemoSQLServer.Płeć]

Problem pojawił się gdy chciałem użyć mojego typu:
DECLARE @mk Płeć
SET @mk.Value = 'k'
Błąd: Mutator 'Value' on '@mk' cannot be called on a null value.
Nie rozumiem przyczyny tego komunikatu.
Czy możecie mi proszę pomóc to poprawić?
Bardzo dziękuję
/RAM/

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





RAM - 19-07-2006 00:45

  > Problem pojawił się gdy chciałem użyć mojego typu:
> DECLARE @mk Płeć
Już wiem:
SET @mk = 'k'

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




RAM - 21-07-2006 01:18

  Poprawiłem definicję metody ToString():

public override string ToString()
{
if (płeć.IsNull)
return "NULL";
return (płeć ? "m" : "k");
}

Niestety dla zapytania:

DECLARE @mk Płeć
SET @mk = 'k'
SELECT CONVERT(nvarchar, @mk)

zwraca się NULL a nie 'k'. Możecie mi podpowiedzieć dlaczego? Jak to napisać?
Dziękuję
/RAM/

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?= [oracle] - Oracle SQL Developer - co to jest SID? [MS SQL + kontakty outlook]CZy kontakty moge być zewnętrzne?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com