【发布时间】:2015-04-29 20:41:10
【问题描述】:
我在 ASP.NET 中有一个 SqlDataSource,它返回错误
未处理的 System.Data.SqlClient.SQLException,varchar 值 '5157964168' 的转换溢出了一个 int 列
我不确定它为什么抱怨 int 列,因为我的代码中没有任何东西是 int 列。我应该寻找什么?
protected void SqlDataSourceA_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@ID"].Value = DropDownListID.SelectedValue;
}
protected void Page_Load(object sender, EventArgs e)
{
SqlDataSourceA.SelectCommand = "SELECT ID, FolderName FROM DR_Folders where parentID=CONVERT(BIGINT,@ID) AND parentID!=0 order by FolderName ASC";
}
<asp:SqlDataSource ID="SqlDataSourceA" runat="server"
ConnectionString="<%$ ConnectionStrings:AConnectionString %>"
SelectCommand="">
<SelectParameters>
<asp:Parameter Name="ID" DbType="String" />
</SelectParameters>
</asp:SqlDataSource>
我在DropDownListID.SelectedValue 中看到5157964168。我不明白为什么它没有进入@ID 并正确执行。 @ID 不是字符串吗?
我也尝试过Type="String" 而不是DbType,因为我不确定其中的区别。
【问题讨论】:
-
看起来 ID 对我来说是一个 INT。你的数据库定义是什么意思?
-
您正在将 @ID 转换为 BIGINT
-
我的列 ID 和 parentID 是 BIGINT。 @ID 然而不是。它应该是 SQL 世界中的字符串或 varchar 并转换为 BIGINT。以上数字对 BIGINT 有效。
-
虽然我不认为这种情况是这种情况,但有时会有一个触发器将数据发送到具有 int 列的表
标签: c# asp.net sql-server sqldatasource sqlexception