簡體   English   中英

使用excel-DNA的單例模式和服務器連接

[英]Singleton pattern and server connection using excel-DNA

我有一個SQL數據庫。

然后在一個類中,我有一個ExcelFunction

[ExcelFunction(Description = "fonction de recherche")]
public static double id(string _isin)
{
   double res;
   res =DBSQL.Instance.getID(_isin);
   return res;
}

然后在另一個類中,我進行了連接並創建了單例模式(為了在多線程的情況下保持安全)。 這個想法可能不清楚,只是問我,我會盡力解釋。 關鍵是要打開一個連接(使用單例模式),然后執行請求,然后刪除單例以關閉連接。

這是我的代碼:

public class DBSQL : iAccesDB1
{

    private SqlConnection MaConn = new SqlConnection("sefhgoefhouzeyf");

    private static volatile DBSQL instance;

    private static object syncRoot = new Object();

    private DBSQL() {}

    public static DBSQL Instance
    {   
        get 
        {
           if (instance == null)   
           {
               lock (syncRoot)
               {
                    if (instance == null)
                        instance = new DBSQL();
                }
            }
            return instance;
        }
    }

    public void Connection()    
    {
        MaConn.Open();
    }

    public void CloseConnection()
    {
        MaConn.Close();
    }

    public double getID(String _isin)
    {
        SqlDataReader rd;

        double res = -9999;

        SqlCommand cd = new SqlCommand("select cpn from tD where isin='" + _isin + "'", MaConn);
        try
        {
            rd = cd.ExecuteReader();
            if (rd.HasRows)
            {
                while (rd.Read())
                    res =double.Parse(rd["cpn"].ToString());
            }
        }
        catch (Exception ex)
        {
            throw new Exception("1000: " + ex.Message);
        }
        return res;
    }
}

問題是它不起作用-在我的excel單元中,我有以下內容:VALUE?

當您的Excel-DNA函數將#VALUE返回給Excel時,這可能意味着存在未處理的異常。

我建議您更改頂級函數以返回一個“對象”,如果存在異常,該對象將返回錯誤字符串,如下所示:

[ExcelFunction(Description = "fonction de recherche")]
public static object id(string _isin)
{ 
    try 
    {
        double res;
        res = DBSQL.Instance.getID(_isin);
        return res; 
    }
    catch (Exception ex)
    {
        return "!!! ERROR: " + ex.ToString();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM