using System; using System.Data; using System.Data.Sql; using System.Data.SqlTypes; using System.Data.SqlClient; using Microsoft.SqlServer.Server; using System.Text.RegularExpressions; using System.Runtime.InteropServices; public partial class StoredProcedures { [SqlFunction] public static Boolean RegMatch(String input,String regex) { return Regex.IsMatch(input, regex); } [SqlFunction] public static String FormatTime(String times,String formatStr) { return DateTime.Parse(times).ToString(formatStr); } }; [Serializable] [SqlUserDefinedType(Format.UserDefined, MaxByteSize = 1024)] public struct Student:INullable,IBinarySerialize { private String _stuName; private String _stuMail; private UInt32 _stuAges; private Boolean _isNull; public String StuName { get { return _stuName; } set { _stuName = value; } } public String StuMail { get { return _stuMail; } set { _stuMail = value; } } public UInt32 StuAges { get { return _stuAges; } set { _stuAges = value; } } public static Student Null { get { return new Student() { _isNull = true }; } } public override string ToString() { return String.Format("姓名:{0},年龄:{1},邮箱:{2}",StuName,StuAges,StuMail); } public static Student Parse(SqlString stuString) { try { if (stuString.IsNull || stuString.Value.ToLower().Equals("null")) return Null; String[] args = stuString.Value.Split(','); return new Student() { StuName = args[0], StuAges = Convert.ToUInt32(args[1]), StuMail = args[2] }; } catch (Exception ex) { throw new Exception(ex.Message); } } #region INullable Members public bool IsNull { get { return this._isNull; } } #endregion #region IBinarySerialize Members public void Read(System.IO.BinaryReader r) { { this._stuName = r.ReadString(); this._stuAges = r.ReadUInt32(); this._stuMail = r.ReadString(); this._isNull = r.ReadBoolean(); } } public void Write(System.IO.BinaryWriter w) { { w.Write(this._stuName); w.Write(this._stuAges); w.Write(this._stuMail); w.Write(this._isNull); } } #endregion }