OpenQuery在C#中不起作用

时间:2015-08-14 04:55:45

标签: c# sql odbc openquery

我可以使用C#中的odbc连接成功连接到远程服务器。

public void checkGradedSerials()
        {
            List<string> gradedHides = new List<string>();
            string queryString = "SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'";
            using (OdbcConnection connection = new OdbcConnection("DSN=Pxxxxx32; UID=odbc.xxxx; PWD=xxxxxxx;"))
            {
                OdbcCommand command = new OdbcCommand(queryString, connection);

                command.Connection = connection;
                connection.Open();
                object test = command.ExecuteScalar();
                Console.WriteLine(test.ToString());

            }
        }

问题在于这可以防止超时。我认为这是因为我正在向客户端发送请求到远程服务器(我在新西兰,数据库在美国)。该表中有5000万条记录,所以难题是它太大而不能作为一张桌子拉,但是因为我在我的&#39; WHERE&#39;中使用了更多的过滤器。在尝试处理数据时发生超时。

在SQL Management studio中,我可以通过OpenQuery成功运行查询,我相信在远程服务器上运行sql。

但是,如果我将相同的查询放入上面的代码中,那么:

 string queryString = "SELECT * FROM OPENQUERY (PLEXREPORT, 'SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2') WHERE Change_Date >= ''2015-04-01'' AND Location = ''H Grading''";

我收到错误:

enter image description here

有没有人知道让sql在服务器上运行的另一种方式,或者我做错了什么?它让我疯了!

1 个答案:

答案 0 :(得分:0)

您的SQL错误

更正的sql是

SELECT COUNT( Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'

替换

string queryString = "SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'";

通过

string queryString = "SELECT COUNT(Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'";