连接sql server2005时提示:内部连接致命错误。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接sql server2005时提示:内部连接致命错误。相关的知识,希望对你有一定的参考价值。

C# winForm程序连接sql server2005,
出现以上提示,咋回事?

相关程序如下:
string SQL = "select * from Employee";
string myConStr = "Data Source=" + serverIP + "\\SQLEXPRESS;Initial Catalog=FilmManager;User ID=clwang;Persist Security Info=True";
SqlConnection myConnection = new SqlConnection(myConStr);
SqlDataAdapter myAdapter = new SqlDataAdapter(SQL,myConnection);
myAdapter.SelectCommand = new SqlCommand(SQL, myConnection);

try

myConnection.Open();
myAdapter.Fill(myDS);


catch (Exception ex)

MessageBox.Show(ex.Message);

finally

if (myConnection.State == ConnectionState.Open)
myConnection.Close();


应该不是程序的问题。

不过Express版本的本身没有带图形化管理工具,因为你可以在vs2005里边对数据库进行操作。
SQL SERVER2005 使用的图形界面工具是 SQL Server Management Studio,
在其它版本的SQL SERVER 2005 里,都带这个工具的,仅Express版本不带。
现在微软官方提供CTP版本供Express版使用,下面是下载链接,你可以下载后安装,安装后在SQL SERVER 2005 程序组里就会出现SQL Server Management Studio Express,使用它来进行管理即可。

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796

另外需要安装xml6的话,下载页面也
参考技术A 看看是不是环境变量的问题,检查一下数据库路径

使用内部连接时如何在 sql server 中获取计数?

【中文标题】使用内部连接时如何在 sql server 中获取计数?【英文标题】:how to get count in sql server while using inner joins? 【发布时间】:2012-11-03 22:21:30 【问题描述】:

我有以下查询:

SELECT  
   h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
   s.SitePageName,s.pagepath
FROM 
   tblSiteRolePermissions p
INNER JOIN 
   tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN 
   tblHelp h ON s.pkSitePageId=h.fkSitePageId
WHERE 
   (p.fkRoleId = 4 AND p.ViewOnly = 1) 
ORDER BY 
   s.pkSitePageId

我想从tblSiteRolePermissions 获得计数。我已经尝试过Count,但它抛出了一些错误,例如:

消息 8120,第 16 层,状态 1,第 1 行 列 'tblHelp.HelpContent' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

请帮助我,让我知道我错在哪里。

更新

这是我正在尝试的代码:

SELECT 
    count(p.pkRolePermissionId), 
    h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName, 
    s.SitePageName, s.pagepath
FROM
    tblSiteRolePermissions p
INNER JOIN 
    tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN
    tblHelp h ON s.pkSitePageId = h.fkSitePageId
WHERE 
    (p.fkRoleId = 4 AND p.ViewOnly = 1) 
ORDER BY 
    s.pkSitePageId

【问题讨论】:

你要数什么? @PaulAlanTaylor 请查看我的问题,我已经更新了它.. 错误信息与您的示例 SQL 语句不匹配。您的语句中既没有count()(或任何其他聚合函数)也没有group by。请向我们展示产生错误的真实陈述。 @a_horse_with_no_name 请立即查看 您想获取 all 行的计数,还是仅获取单个 fkSitePageId 的计数?还是其他一些属性组合? 【参考方案1】:

如果您使用的是聚合函数,则需要对 SELECT 语句中不在聚合中的剩余字段使用 GROUP BY 子句。类似这样:

SELECT  count(p.pkRolePermissionId) CountRolePermission,
  h.helpcontent, 
  s.MenuID, 
  s.pkSitePageId, 
  s.PageAliasName,
  s.SitePageName,
  s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s 
  ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h 
  on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1) 
GROUP BY h.helpcontent, 
  s.MenuID, 
  s.pkSitePageId, 
  s.PageAliasName,
  s.SitePageName,
  s.pagepath
ORDER BY s.pkSitePageId

如果你想要所有行的计数,那么你可以使用这样的东西:

SELECT  NumRows.TotalCount,
  h.helpcontent, 
  s.MenuID, 
  s.pkSitePageId, 
  s.PageAliasName,
  s.SitePageName,
  s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s 
  ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h 
  on s.pkSitePageId=h.fkSitePageId
cross join
(
  SELECT  count(*) TotalCount
  from tblSiteRolePermissions p
  INNER JOIN tblSitePages s 
    ON p.fkSitePageId = s.pkSitePageId
  inner join tblHelp h 
    on s.pkSitePageId=h.fkSitePageId
  WHERE (p.fkRoleId =4 and p.ViewOnly=1) 
) NumRows
WHERE (p.fkRoleId =4 and p.ViewOnly=1) 
ORDER BY s.pkSitePageId

或者您可以在查询中使用 CTE,类似于:

;with cte as 
(
  SELECT h.helpcontent, 
    s.MenuID, 
    s.pkSitePageId, 
    s.PageAliasName,
    s.SitePageName,
    s.pagepath
  from tblSiteRolePermissions p
  INNER JOIN tblSitePages s 
    ON p.fkSitePageId = s.pkSitePageId
  inner join tblHelp h 
    on s.pkSitePageId=h.fkSitePageId
  WHERE (p.fkRoleId =4 and p.ViewOnly=1) 
)
select h.helpcontent, 
    s.MenuID, 
    s.pkSitePageId, 
    s.PageAliasName,
    s.SitePageName,
    s.pagepath, 
    (select count(*) from cte) as Total
from cte

【讨论】:

@Visions 这意味着您计算的数据由于GROUP BY 而不同。您到底想count() 做什么,这对于确定正确的语法很重要。【参考方案2】:
SELECT count(p.pkRolePermissionId),h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1) 
GROUP BY h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
ORDER BY s.pkSitePageId

【讨论】:

以上是关于连接sql server2005时提示:内部连接致命错误。的主要内容,如果未能解决你的问题,请参考以下文章

连接SQL2005出现SQL Server 无法连接到服务器 提示 服务器:消息11,级别16,状态1 怎么解决啊

SQL Server 2005 - 内部联接的顺序

我用sql server 2008 management studio 连接 sql server 2005, 提示4064错误,请问如何解决?

如何用SQL SERVER 2005连接SQL SERVER 2008

如何远程连接sqlserver,提示是“不存在或访问被拒绝”

vs2005和sql2005都提示没找到或者访问连接不到服务器,