同样是 SELECT * FROM Master.dbo.SYSPROCESSES WHERE (dbid = 5) 这样一句查询进程数据,用远程连接DB然后打开SQL管理器执行这样一句话,返回70多条记录,而放在页面里边执行,却只有一条??这是为什么呢以下是我在页面上列出的代码(.NET)
+++++++++++++++++string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["webwritermtk"].ConnectionString;
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandTimeout = 100;
sqlcmd.CommandText = "SELECT * FROM Master.dbo.SYSPROCESSES WHERE (dbid = 5) ";
sqlcmd.Connection = conn;
sqlcmd.CommandType = CommandType.Text;
SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
adp.Fill(dt);
common.print(dt);//这句是个方法,列出DataTable中的内容,在此不再列出了。
dt.Dispose();
conn.Close();
conn.Dispose();
++++++++++++++++++
是不是要哪里设置?
+++++++++++++++++string strconn = System.Configuration.ConfigurationManager.ConnectionStrings["webwritermtk"].ConnectionString;
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandTimeout = 100;
sqlcmd.CommandText = "SELECT * FROM Master.dbo.SYSPROCESSES WHERE (dbid = 5) ";
sqlcmd.Connection = conn;
sqlcmd.CommandType = CommandType.Text;
SqlDataAdapter adp = new SqlDataAdapter(sqlcmd);
DataTable dt = new DataTable();
adp.Fill(dt);
common.print(dt);//这句是个方法,列出DataTable中的内容,在此不再列出了。
dt.Dispose();
conn.Close();
conn.Dispose();
++++++++++++++++++
是不是要哪里设置?
这个存放的应该是一个记录集, common.print(dt) 这样是不是只打印了一次,试试用循环,按dt的长度来做,.NET不是很清楚,JAVA里倒是用循环来取记录集里的记录。
肯定是要用到循环的,因为SQL语句查询出来的不是固定的一条记录,是一个集合形式的,要循环来取!
但同样,web的方式我也已经赋予了足够权限,在master上也有读写权限, 可怎么就读不出呢,郁闷。
如果用户对服务器具有 VIEW SERVER STATE 权限,则该用户可查看 SQL Server 实例中所有正在执行的会话;否则,该用户只能查看当前会话。
-----------来自微软msdn
比如
Grant VIEW SERVER STATE to jasonmeng
Grant VIEW SERVER STATE to flashgroup\jasonmeng前一个提示找不到用户名,后一个提示语法错误。
【注:我们的登录名都是在域里边,完全的用户名是加域的】