首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 建立 COM 物件(二):ClassInterfaceType.None、事件介面與完整原始碼

     編輯:關於C語言

關鍵屬性設定

  • ClassInterfaceType.None:不產生類別介面,若未明確實作介面則僅支援 IDispatch 晚期繫結。建議明確實作介面供外部存取
  • ComSourceInterfaces(typeof(DBCOM_Events)):指定對外公開的事件介面。本範例不公開事件,介面定義為空

完整 COM 物件原始碼

using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace Database_COMObject
{
    [Guid("694C1820-04B6-4988-928F-FD858B95C880")]
    public interface DBCOM_Interface
    {
        [DispId(1)] void Init(string userid, string passWord);
        [DispId(2)] bool ExecuteSelectCommand(string selCommand);
        [DispId(3)] bool NextRow();
        [DispId(4)] void ExecuteNonSelectCommand(string insCommand);
        [DispId(5)] string GetColumnData(int pos);
    }

    [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),
     InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface DBCOM_Events { }

    [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"),
     ClassInterface(ClassInterfaceType.None),
     ComSourceInterfaces(typeof(DBCOM_Events))]
    public class DBCOM_Class : DBCOM_Interface
    {
        private SqlConnection myConnection = null;
        private SqlDataReader myReader = null;

        public DBCOM_Class() { }

        public void Init(string userid, string passWord)
        {
            try
            {
                string connStr = "user id=" + userid + ";password=" + passWord +
                    ";Database=NorthWind;Server=SKYWALKER;Connect Timeout=30";
                myConnection = new SqlConnection(connStr);
                myConnection.Open();
                MessageBox.Show("CONNECTED");
            }
            catch (Exception e) { MessageBox.Show(e.Message); }
        }

        public bool ExecuteSelectCommand(string selCommand)
        {
            if (myReader != null) myReader.Close();
            SqlCommand cmd = new SqlCommand(selCommand, myConnection);
            cmd.ExecuteNonQuery();
            myReader = cmd.ExecuteReader();
            return true;
        }

        public bool NextRow()
        {
            if (!myReader.Read()) { myReader.Close(); return false; }
            return true;
        }

        public string GetColumnData(int pos)
        {
            object obj = myReader.GetValue(pos);
            return obj == null ? "" : obj.ToString();
        }

        public void ExecuteNonSelectCommand(string insCommand)
        {
            SqlCommand cmd = new SqlCommand(insCommand, myConnection);
            cmd.ExecuteNonQuery();
        }
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved