本地是 MS SQL 2005 能正常运行
服务端是 MSSQL 2000出错信息
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------第 1 行: '(' 附近有语法错误。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: '(' 附近有语法错误。源错误:
行 188: Da.SelectCommand.Parameters.Add(Para);
行 189: DataTable Dt = new DataTable();
行 190: Da.Fill(Dt);
行 191: DataRowCollection Ds = Dt.Rows;
行 192: String Title="";
出错代码 //加载数据
private void LoadArticle(String ParentClass,String SubClass,String NowPage)
{
String _Html = ""; using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString))
{
using (SqlDataAdapter Da = new SqlDataAdapter("SqlPage", conn))
{
Da.SelectCommand.CommandType = CommandType.StoredProcedure;
Da.SelectCommand.Parameters.Add(new SqlParameter("@TableName", "Article"));
Da.SelectCommand.Parameters.Add(new SqlParameter("@Fields", "Title,AddTime,_FileName,SubClass"));
Da.SelectCommand.Parameters.Add(new SqlParameter("@OrderFields", " id desc"));
#region
String SqlWhere = "";
if (ParentClass != "0")
{
SqlWhere += " and ParentClass=" + ParentClass;
SqlWhere += " and SubClass=" + SubClass;
}
else
{ SqlWhere += " and SubClass=" + SubClass + " or ParentClass=" + SubClass;
}
#endregion Da.SelectCommand.Parameters.Add(new SqlParameter("@SqlWhere", SqlWhere));
Da.SelectCommand.Parameters.Add(new SqlParameter("@PageSize", 30));
Da.SelectCommand.Parameters.Add(new SqlParameter("@PageIndex", NowPage));
SqlParameter Para = new SqlParameter("@TotalPages", SqlDbType.Int);
Para.Direction = ParameterDirection.Output;
Da.SelectCommand.Parameters.Add(Para);
DataTable Dt = new DataTable();
Da.Fill(Dt);
DataRowCollection Ds = Dt.Rows;
String Title="";
foreach (DataRow Dr in Ds)
{
Title=Dr["Title"].ToString();
_Html += "<li>[" + ReMenu(Dr["SubClass"].ToString()).Replace(" >> ", "") + "] <a href=\"" + Dr["_FileName"].ToString() + "\" target=\"_blank\" title=\"" + Title + "\" class=\"ArticleSubMenu\">" + Title + "</a> </li>";
}
conn.Close();
MenuUrl(Para.Value.ToString(), ParentClass, SubClass, NowPage);
F_SiteMap(ParentClass, SubClass);
}
}
MyIndex.Text = _Html;
}
服务端是 MSSQL 2000出错信息
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------第 1 行: '(' 附近有语法错误。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 第 1 行: '(' 附近有语法错误。源错误:
行 188: Da.SelectCommand.Parameters.Add(Para);
行 189: DataTable Dt = new DataTable();
行 190: Da.Fill(Dt);
行 191: DataRowCollection Ds = Dt.Rows;
行 192: String Title="";
出错代码 //加载数据
private void LoadArticle(String ParentClass,String SubClass,String NowPage)
{
String _Html = ""; using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString))
{
using (SqlDataAdapter Da = new SqlDataAdapter("SqlPage", conn))
{
Da.SelectCommand.CommandType = CommandType.StoredProcedure;
Da.SelectCommand.Parameters.Add(new SqlParameter("@TableName", "Article"));
Da.SelectCommand.Parameters.Add(new SqlParameter("@Fields", "Title,AddTime,_FileName,SubClass"));
Da.SelectCommand.Parameters.Add(new SqlParameter("@OrderFields", " id desc"));
#region
String SqlWhere = "";
if (ParentClass != "0")
{
SqlWhere += " and ParentClass=" + ParentClass;
SqlWhere += " and SubClass=" + SubClass;
}
else
{ SqlWhere += " and SubClass=" + SubClass + " or ParentClass=" + SubClass;
}
#endregion Da.SelectCommand.Parameters.Add(new SqlParameter("@SqlWhere", SqlWhere));
Da.SelectCommand.Parameters.Add(new SqlParameter("@PageSize", 30));
Da.SelectCommand.Parameters.Add(new SqlParameter("@PageIndex", NowPage));
SqlParameter Para = new SqlParameter("@TotalPages", SqlDbType.Int);
Para.Direction = ParameterDirection.Output;
Da.SelectCommand.Parameters.Add(Para);
DataTable Dt = new DataTable();
Da.Fill(Dt);
DataRowCollection Ds = Dt.Rows;
String Title="";
foreach (DataRow Dr in Ds)
{
Title=Dr["Title"].ToString();
_Html += "<li>[" + ReMenu(Dr["SubClass"].ToString()).Replace(" >> ", "") + "] <a href=\"" + Dr["_FileName"].ToString() + "\" target=\"_blank\" title=\"" + Title + "\" class=\"ArticleSubMenu\">" + Title + "</a> </li>";
}
conn.Close();
MenuUrl(Para.Value.ToString(), ParentClass, SubClass, NowPage);
F_SiteMap(ParentClass, SubClass);
}
}
MyIndex.Text = _Html;
}
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER procedure [dbo].[SqlPage]
@TableName varchar(50), --表或视图名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderFields varchar(5000), --排序字段(必须!支持多字段,建议建索引)
@SqlWhere varchar(5000) = '', --条件语句(如and Name='a')
@PageSize int, --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@TotalPages int output --返回总页数
as
begin
declare @sql nvarchar(4000)
declare @TotalRecords int --计算总记录数及总页数
set @sql = 'select @TotalRecords = count(*) from ' + @TableName + ' where 1=1 ' + @sqlWhere
exec sp_executesql @sql,N'@totalRecords int output',@TotalRecords output
select @TotalPages=CEILING((@TotalRecords+0.0)/@PageSize) --处理页数超出范围情况
if @PageIndex<=0
set @PageIndex = 1
if @PageIndex>@TotalPages
set @PageIndex = @TotalPages set @sql = 'select '+ @Fields + ' from (select top(@PageIndex*@PageSize) ' + @Fields + ',row_number() over(order by ' + @OrderFields + ') as rowNumber from ' + @TableName + ' where 1=1 ' + @SqlWhere + ') t where t.rowNumber >= ((@PageIndex-1)*@PageSize+1)'
--print @Sql
exec sp_executesql @sql,N'@PageIndex int, @PageSize int',@PageIndex,@PageSize
end