使用excel-DNA的单例模式和服务器连接

本文关键字:服务器 连接 单例模式 excel-DNA 使用 | 更新日期: 2023-09-27 18:12:22

我有一个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单元格我有以下内容:值?

使用excel-DNA的单例模式和服务器连接

当你的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();
    }
}