如何在c#

时间:2015-04-22 11:09:39

标签: c# database-connection openquery

我有一个openquery SQL脚本:

Select * from openquery([oak],'
SELECT LicenseKey, SUM(PaymentAmount)as Payments
FROM vw_ODBC_actv_Payments pt 
WHERE MONTH(pt.EntryDate) = 2 and
YEAR(pt.EntryDate) = 2015 
GROUP BY LicenseKey
')

当我从SSMS运行时,我可以看到它返回预期的n行。

但是,当我使用相同的连接属性触发它以获取C#控制台应用程序的DataSet中的数据时:

    SqlDataAdapter da = new SqlDataAdapter();
    SqlCommand pcmd= new SqlCommand();
    DataSet ds= new DataSet();
    OpenConnection();
    pcmd.Connection = new SqlConnection("Data source=IP adress of the server;Initial Catalog=master; user ID=***; password=***");
    cmd.CommandText = "Select * from openquery([oak],'" +
    "SELECT LicenseKey, SUM(PaymentAmount)as Payments" +
    "FROM vw_ODBC_actv_Payments pt " +
    "WHERE MONTH(pt.EntryDate) = 2 and" +
    "YEAR(pt.EntryDate) = 2015" +
    "GROUP BY LicenseKey')";
try
{
    da.SelectCommand = pcmd;
    da.Fill(ds); //here comes the error
}
catch (Exception ex)
{
    throw new Exception("DBUtils.ExecuteReader():" + ex.Message);
}

我收到这样的错误:

  

提供者表示该用户没有权限   执行操作。现在我需要对这个问题做点什么

我刚学习openquery。任何人都可以指导吗?

1 个答案:

答案 0 :(得分:2)

首先,您不会在代码中的任何位置打开连接,因此会出错。第二步使用using块清理代码。因此,假设查询按要求工作,您可以执行类似的操作。

using(SqlConnection con = new SqlConnection("Connection String Here"))
    {
        string myQuery = "Your Query";
        using(SqlCommand cmd = new SqlCommand(myQuery, con))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                con.Open();
                sda.SelectCommand = cmd;
                DataSet ds = new DataSet();
                sda.Fill(ds);
            }
        }
    }

注意:如果您将connectionString存储在config文件中并在代码中阅读,那会更好。