SQL Server 2005和ADO.Net之间SQL语法的差异?

时间:2011-01-04 15:56:04

标签: .net sql-server-2005 ado.net

我想知道在SQL Management Studio中直接运行查询和在.net应用程序中创建sql查询作为字符串并通过SQLCommand和Connection发送它之间是否存在已接受的SQL语法结构的任何已知差异的汇编?我打算询问一个特定问题我遇到的具体问题,但事实证明我遇到了多个查询的多个问题。我基本上采取了由其他人编写的一组查询并将它们注入到我正在实现的.Net Web部件中,但我发现我需要调整大多数查询(即Table1.Column1不起作用,只是Column1工作正常)

我想知道我遇到的问题是两个环境之间的已知差异,还是问题出在数据库/架构/查询结构问题中?

编辑示例:

以下4个查询都在SQL Management Studio中工作但未传递到.net Web部件中的SQL连接...由于无法工作,我的意思是Web部件不会加载到asp页面中(实际上是一个SharePoint页面)我告诉SharePoint它引起了一个问题。我不确定要查看正确的sharepoint日志...(请注意我知道这些查询没有意义,例如FROM子句的无意义,但它们是我正在玩弄的调试查询试着找出问题)

第5个查询在SQL Management Studio和.Net Web部件中都能正常工作,但它与我想要的逻辑相反......

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

    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 个答案:

答案 0 :(得分:2)

显然,问题是您不知道如何找到可帮助您解决问题的SharePoint日志。因此,尝试消除SharePoint。

将执行数据库I / O的Web部件部分提取到单独的类中。从普通的ASP.NET应用程序调用这些类。看看你是否能以同样的方式失败。

如果没有,则尝试将您的ADO.NET代码包装在try / catch块中,并在catch中尝试创建事件日志条目。请参阅System.Diagnostics名称空间。

最后,也许你应该问一下错误日志的位置。也许这些信息已经存在。也许您应该部署到可以更好地控制的测试SharePoint?

答案 1 :(得分:0)

不,没有区别。

SQL Server将以相同的方式解析和执行SQL字符串。

你有什么具体的想法吗?

答案 2 :(得分:0)

如果你直接与SqlCommand谈话(而不是像数据适配器这样的抽象)它应该是相同的 - 它只是发送到te服务器的TSQL。唯一的区别可能是生效的SET选项,可能是您使用的帐户,默认架构等