ASP.NET调用存储过程后出现 列“xxx”不属于表 Table。的问题(急急急)

曾经程序猿 2009-03-02 11:06:15
孟老师 , 您好 , 有个问题要向您请教 ? 我在用asp.net + sql server 2000做完网站后在本机上测试一切都正常 , 但是程序更新到正式后经常会出现 列“xxx”不属于表 Table 或者 xxx既不是表 Table 的 DataColumn 也不是 DataRelation。 这样的问题 , 但是程序在调用存储过程的时候返回的dataset中都有这些字段 , 而且这样的问题是隔一段时间就发生。。。麻烦您帮我看看吧。。。。。谢谢了。。。


下面是我其中的一个存储过程 , 当程序调用这个存储过程后在页面中使用返回的dataset的时候就会提示 列“xxx”不属于表 Table这样的错误 :


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[SP_GetRecommendRedemptionList]
-- Add the parameters for the stored procedure here
@LanguageCode VARCHAR(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


DECLARE @SQL VARCHAR(1000);

-- Insert statements for procedure here

Begin Try

SET @SQL = 'SELECT c.SortCode, b.[Name] as RedemptionName, b.[Title], b. [Description],
a.ID as RedemptionId, Convert(decimal(10,0), a.points) as points,
Replace(replace(a.ImageUrl, ''\'',''/''), ''~'', ''..'') as RedemptionImageUrl,
a.Quantity , CONVERT(varchar(12), a.ExpireDate, 111) as ExpireDate
FROM Redemption a
Inner Join RedemptionCategory c On a.categoryId=c.categoryId
INNER JOIN RedemptionLang b
ON a.ID=b.RedemptionID
AND a.ExpireDate>getdate() AND a.IsRecommend=1
AND b.LanguageCode = ''' + @LanguageCode + ''' Order by c.SortCode, a.SortCode, b.[name]';


EXEC(@SQL)

End Try

Begin Catch
DECLARE @ErrorMessage VARCHAR(255)
DECLARE @ErrorSeverity INT
DECLARE @ErrorState INT
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE()

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

End Catch
END





...全文
461 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
uuoo365 2012-10-27
  • 打赏
  • 举报
回复
列“type_name”不属于表 Table
泡面之夏 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 allan123 的回复:]
SqlConnection 不要用全局或静态或单例模式 , 否则会出现不同进程进下共用connection的情况 , 特别是在web环境下 , 这将导致使用者获取的dataset不正确 , 从而引发上面我提出的问题 , 解决的方法是在需要做数据连接的地方new connection来使用 , 用后close , 这样就可以避免出现类似于 “xxxxx不属于表 Table ”等一系列的问题了。。。
[/Quote]

学习了。。。
lsd123 2009-09-03
  • 打赏
  • 举报
回复
.
a12321321321312321 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 allan123 的回复:]
SqlConnection 不要用全局或静态或单例模式 , 否则会出现不同进程进下共用connection的情况 , 特别是在web环境下 , 这将导致使用者获取的dataset不正确 , 从而引发上面我提出的问题 , 解决的方法是在需要做数据连接的地方new connection来使用 , 用后close , 这样就可以避免出现类似于 “xxxxx不属于表 Table ”等一系列的问题了。。。
[/Quote]
学习了
曾经程序猿 2009-03-09
  • 打赏
  • 举报
回复
SqlConnection 不要用全局或静态或单例模式 , 否则会出现不同进程进下共用connection的情况 , 特别是在web环境下 , 这将导致使用者获取的dataset不正确 , 从而引发上面我提出的问题 , 解决的方法是在需要做数据连接的地方new connection来使用 , 用后close , 这样就可以避免出现类似于 “xxxxx不属于表 Table ”等一系列的问题了。。。
zzxap 2009-03-05
  • 打赏
  • 举报
回复
字段名有没有正确?不正确就会出现这样的提示
cwmwss 2009-03-05
  • 打赏
  • 举报
回复
编码方式?能具体点不
曾经程序猿 2009-03-05
  • 打赏
  • 举报
回复
结贴 ,自己解决了,是数据访问层编码方式有问题 , 不过还是要谢谢各位的热心帮助。。。
wyl918 2009-03-05
  • 打赏
  • 举报
回复
我的偶尔也会出现这种情况,但是我没有找出原因来,之前还以为是没有取出数据来呢
曾经程序猿 2009-03-03
  • 打赏
  • 举报
回复
CSDN上的大牛们呢 ?怎么冒了两个泡就不见了 , 这个问题只在访问数据库返回DataSet的问题时才出现 , 数据访问是用的三层结构 , BLL层和DAL层都用的是单例模式 , 哪位大侠以前碰到过类似的问题呀 ?
浪子-无悔 2009-03-02
  • 打赏
  • 举报
回复
都是牛人。。
曾经程序猿 2009-03-02
  • 打赏
  • 举报
回复
我print出来的结果也是正常的 , 如下 :

SELECT c.SortCode, b.[Name] as RedemptionName, b.[Title], b. [Description],
a.ID as RedemptionId, Convert(decimal(10,0), a.points) as points,
Replace(replace(a.ImageUrl, '\','/'), '~', '..') as RedemptionImageUrl,
a.Quantity , CONVERT(varchar(12), a.ExpireDate, 111) as ExpireDate
FROM Redemption a
Inner Join RedemptionCategory c On a.categoryId=c.categoryId
INNER JOIN RedemptionLang b
ON a.ID=b.RedemptionID
AND a.ExpireDate>getdate() AND a.IsRecommend=1
AND b.LanguageCode = 'zh-cn' Order by c.SortCode, a.SortCode, b.[name]


头痛的是这个问题是偶尔才会报出来的 , 而且每次报这个问题出来都会连带出一系列的错误 , 请教各位专家还有没有其他的可能会出这个错 ?
ffyyn 2009-03-02
  • 打赏
  • 举报
回复
学习
曾经程序猿 2009-03-02
  • 打赏
  • 举报
回复
谢谢两位专家的提示 , 我的aspx页面的代码如下 :


<asp:DataList ID="RecommendRedemptionList1" BorderColor="red" runat="server" RepeatColumns="4">

<ItemStyle VerticalAlign="Top" Width="130" />
<ItemTemplate>
<table border="0" style="margin-left:3px; margin-top:1px; vertical-align:top;">
<tr>
<td><asp:ImageButton runat="server" Width="129" Height="80" BorderColor="blue" ID="RecommendImage1" ImageUrl='<%#((DataRowView)Container.DataItem)["RedemptionImageUrl"]%>' OnClick="RecommendImage1_Click" CommandArgument='<%#((DataRowView)Container.DataItem)["RedemptionId"]%>'></asp:ImageButton></td>
</tr>
<tr>
<td><asp:Label runat="server" ID="RedemptionName1" Text='<%#((DataRowView)Container.DataItem)["RedemptionName"]%>'></asp:Label></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>
<asp:Label runat="server" ID="RedemptionDoints1" Text='<%# string.Format("{0:N0}", Convert.ToInt32(((DataRowView)Container.DataItem)["points"])) %>'></asp:Label>
<asp:Label ID="AB88Point" runat="server" meta:resourceKey="AB88PointResource"></asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>




后台绑定代码如下 :


protected void InitializeRecommend()
{
string language = GetLanguage();

try
{
DataSet ds = BO_Redemption.Instance.GetRecommendRedemptionList(language);
if (ds != null && ds.Tables.Count > 0)
{
DataTable dt = ds.Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
this.RecommendRedemptionList1.DataSource = dt;
this.RecommendRedemptionList1.DataBind();
}
}
}
catch (Exception ex)
{
string url = this.Page.Request.Url.LocalPath;
LogUtility.LogWrite(url, "InitializeRecommend", ex);
}
}



数据库存储过程如下 :


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[SP_GetRecommendRedemptionList]
-- Add the parameters for the stored procedure here
@LanguageCode VARCHAR(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


DECLARE @SQL VARCHAR(1000);

-- Insert statements for procedure here

Begin Try

SET @SQL = 'SELECT c.SortCode, b.[Name] as RedemptionName, b.[Title], b. [Description],
a.ID as RedemptionId, Convert(decimal(10,0), a.points) as points,
Replace(replace(a.ImageUrl, ''\'',''/''), ''~'', ''..'') as RedemptionImageUrl,
a.Quantity , CONVERT(varchar(12), a.ExpireDate, 111) as ExpireDate
FROM Redemption a
Inner Join RedemptionCategory c On a.categoryId=c.categoryId
INNER JOIN RedemptionLang b
ON a.ID=b.RedemptionID
AND a.ExpireDate>getdate() AND a.IsRecommend=1
AND b.LanguageCode = ''' + @LanguageCode + ''' Order by c.SortCode, a.SortCode, b.[name]';


EXEC(@SQL)

End Try

Begin Catch
DECLARE @ErrorMessage VARCHAR(255)
DECLARE @ErrorSeverity INT
DECLARE @ErrorState INT
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE()

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

End Catch
END


我在VS2005上调试都运行很正常 , 但更新正式机后隔一段时间就报这样的错误出来。。。。请指教 ?
kmiaoer 2009-03-02
  • 打赏
  • 举报
回复
把 EXEC(@SQL)
给成 print @Sql
输出看看。
Jinglecat 2009-03-02
  • 打赏
  • 举报
回复
1. XXX 列是到底是哪列?

2. 输出 @SQL 看看到时拼成什么了?

3.

另外,自定义存储过程不要以 SP_ 打头,SQL 分析器会把这个当做系统存储过程来优先搜索 .....
zhxhdean 2009-03-02
  • 打赏
  • 举报
回复
检查下对应的字段有没有多或少

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧