Различия в синтаксисе SQL между SQL Server 2005 и ADO.Net? - PullRequest
3 голосов
/ 04 января 2011

Мне было интересно, была ли компиляция каких-либо известных различий в принятой структуре синтаксиса SQL между выполнением запроса непосредственно в SQL Management Studio и созданием запроса sql в виде строки в приложении .net и отправкой его через SQLCommand and Connection?Я собирался спросить о конкретной проблеме, которая была у меня с одним конкретным запросом, но оказалось, что у меня несколько проблем с несколькими запросами.Я в основном беру набор запросов, написанных кем-то другим, и внедряю их в веб-части .Net, которые я реализую, но я обнаруживаю, что мне нужно настроить большинство запросов (т.е. Table1.Column1 не работает, только Column1работает нормально)

Мне было интересно, являются ли проблемы, с которыми я сталкиваюсь, известными различиями между двумя средами или проблема заключается в проблемах структуры базы данных / схемы / запроса?

РЕДАКТИРОВАТЬ С ПРИМЕРОМ:

Следующие 4 запроса все работают в SQL Management Studio, но не передаются в SQL-соединение в веб-части .net ... Если не работает, я имею в виду, что веб-часть не будет загружаться на странице asp (онана самом деле страница SharePoint), и я сказал, что SharePoint вызывает проблемы.Я не уверен в правильности журналов sharepoint, на которые можно посмотреть ... (ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: я знаю, что эти запросы не имеют смысла, например, бессмысленность предложения FROM, но это отладочные запросы, с которыми я играл)попытаться определить проблемы)

5-й запрос отлично работает как в SQL Management Studio, так и в веб-части .Net, но это противоположная логика того, что я хотел ..

//-----------------------------------------------

    SELECT DISTINCT 
            '2011' AS Yr, '01' AS PerNbr, 1 AS Amount 
             FROM Submissions AS s INNER JOIN 
            JurisdictionalData  AS j ON re_KeyTbl = Keytbl AND s.jurisdiction <> REPLACE(j.JurisdictionTxt, 'Jurisdiction', '')

//-----------------------------------------------

SELECT DISTINCT 
        '2011' AS Yr, '01' AS PerNbr, 1 AS Amount 
         FROM Submissions AS s INNER JOIN 
        JurisdictionalData  AS j ON j.re_KeyTbl = s.Keytbl AND s.jurisdiction NOT IN (REPLACE(j.JurisdictionTxt, 'Jurisdiction', ''))

//-----------------------------------------------

SELECT DISTINCT 
        '2011' AS Yr, '01' AS PerNbr, 1 AS Amount 
         FROM Submissions AS s INNER JOIN 
        JurisdictionalData  AS j ON j.re_KeyTbl = s.Keytbl AND s.jurisdiction NOT IN (j.JurisdictionTxt)

//-----------------------------------------------

SELECT DISTINCT 
        '2011' AS Yr, '01' AS PerNbr, 1 AS Amount 
         FROM Submissions AS s INNER JOIN 
        JurisdictionalData  AS j ON j.re_KeyTbl = s.Keytbl AND s.jurisdiction <> j.JurisdictionTxt

//-----------------------------------------------
SELECT DISTINCT 
        '2011' AS Yr, '01' AS PerNbr, 1 AS Amount 
         FROM Submissions AS s INNER JOIN 
        JurisdictionalData  AS j ON j.re_KeyTbl = s.Keytbl AND s.jurisdiction = j.JurisdictionTxt

Код C # (довольно стандартный материал):

члены класса:

//sql db connection string
private string _cnString =
"Server=_server;" +
"Database=_db;" +
"User ID=_user;" +
"Password=_password;" +
"Trusted_Connection=False";

//sql query
    private string query = "SELECT DISTINCT " +
    "'2011' AS Yr, '01' AS PerNbr, 1 AS Amount " + 
     "Submissions AS s INNER JOIN " +
    "JurisdictionalData  AS j ON j.re_KeyTbl = s.Keytbl AND s.jurisdiction = j.JurisdictionTxt ";

в моей функции CreateChildControls:

 SqlConnection sqlConn = new SqlConnection(_cnString);
 //run SQL query and store results in a dataset
        SqlCommand sqlCmd = new SqlCommand(query, sqlConn);
        SqlDataAdapter adp = new SqlDataAdapter(sqlCmd);
        DataSet ds = new DataSet();
        adp.Fill(ds);

Ответы [ 3 ]

2 голосов
/ 04 января 2011

Очевидно, что проблема в том, что вы не знаете, как найти журналы SharePoint, которые помогут вам решить проблему.Итак, попробуйте устранить SharePoint.

Извлеките часть вашей веб-части, которая выполняет ввод-вывод базы данных в отдельные классы.Вызовите эти классы из обычного приложения ASP.NET.Посмотрите, можете ли вы сделать так, чтобы он не сработал таким же образом.

Если нет, попробуйте обернуть ваш код ADO.NET в блок try / catch, а в перехвате попытайтесь создать запись в журнале событий.Для этого см. Пространство имен System.Diagnostics.

Наконец, возможно, вам следует спросить, где будут журналы ошибок.Может быть, информация уже там.Может быть, вам следует развернуть на тестовом SharePoint, который вы имеете больший контроль?

0 голосов
/ 04 января 2011

Если вы говорите напрямую с SqlCommand (а не с абстракцией, подобной адаптеру данных), она должна быть идентичной - это просто TSQL, отправленный на сервер.Единственными отличиями могут быть действующие параметры SET, например, используемая вами учетная запись , схема по умолчанию и т. Д.

0 голосов
/ 04 января 2011

Нет, разницы нет.

SQL Server будет анализировать и выполнять строки SQL одинаково.

Есть что-то конкретное, что вы имеете в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...