// Kod pobrany ze strony http://strefa.guzowski.info // Opis do kodu: // http://strefa.guzowski.info/archives/30,2006,12,13.html public class TSQL_vs_CLR { [SqlFunction(DataAccess = DataAccessKind.Read)] public static double FnDataAccess_CLR(int wiersz1, int wiersz2) { string com = "SELECT nazwa_glowna, nazwa_skr, miejscowosc, adres, nr_lokalu, nip, kod_poczt FROM Dane_adresowe WHERE wiersz IN ("+wiersz1.ToString()+","+wiersz2.ToString()+")"; int c = 0; double result = 0.0; // pola string nazwa_glowna_A = ""; string nazwa_skr_A = ""; string miejscowosc_A = ""; string adres_A = ""; string nr_lokalu_A = ""; string nip_A = ""; string kod_poczt_A = ""; string nazwa_glowna_B = ""; string nazwa_skr_B = ""; string miejscowosc_B = ""; string adres_B = ""; string nr_lokalu_B = ""; string nip_B = ""; string kod_poczt_B = ""; using (SqlConnection conn = new SqlConnection("context connection=true")) { // pobranie danych (wykorzystanie context connection) conn.Open(); SqlCommand cmd = new SqlCommand(com, conn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { if (c == 0) { nazwa_glowna_A = dr["nazwa_glowna"].ToString(); nazwa_skr_A = dr["nazwa_skr"].ToString(); miejscowosc_A = dr["miejscowosc"].ToString(); adres_A = dr["adres"].ToString(); nr_lokalu_A = dr["nr_lokalu"].ToString(); nip_A = dr["nip"].ToString(); kod_poczt_A = dr["kod_poczt"].ToString(); c++; } if (c == 1) { nazwa_glowna_B = dr["nazwa_glowna"].ToString(); nazwa_skr_B = dr["nazwa_skr"].ToString(); miejscowosc_B = dr["miejscowosc"].ToString(); adres_B = dr["adres"].ToString(); nr_lokalu_B = dr["nr_lokalu"].ToString(); nip_B = dr["nip"].ToString(); kod_poczt_B = dr["kod_poczt"].ToString(); } } conn.Close(); // zwrocenie wyniku - przez kilka warunkow int adres_A_Length = adres_A.Length; int adres_B_Length = adres_B.Length; int miejscowosc_A_Length = miejscowosc_A.Length; int miejscowosc_B_Length = miejscowosc_B.Length; if (nazwa_glowna_A == nazwa_glowna_B && nazwa_skr_A == nazwa_skr_B) { if (miejscowosc_A == miejscowosc_B) { if (adres_A_Length == adres_B_Length) { return 0.7*miejscowosc_A_Length*miejscowosc_B_Length/2; } } else { return 0; } } else { if (miejscowosc_A_Length > 0 && miejscowosc_B_Length > 0) { return adres_A_Length*adres_B_Length; } else { return 0; } } return result; } } }