读书人

自学.net求解:InvalidCastException:

发布时间: 2013-03-12 11:19:35 作者: rapoo

自学.net求解:InvalidCastException: 指定的转换无效。
本帖最后由 qq13589324 于 2013-03-06 18:28:10 编辑 小弟新手自学。net 现在遇到问题,不知道改如何改代码。
主要是在前台用 <%=usermail%> 这种代码调用后台参数的 其中 数据库中”c_etprs_name“ 这个字段的数据为中文 前台用<%=names%> 调用的 但是不知道 获取数据库 的这些值 , 弄了 一天也没结果
还请各位大仙指教!1

错误信息:
指定的转换无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 指定的转换无效。

源错误:


行 63: {
行 64: userid = s_lg_id;
行 65: usermail = Convert.ToString(sdr.GetDecimal(1));
行 66: names = Convert.ToString(sdr.GetDecimal(2));
行 67: usermny = Convert.ToString(sdr.GetDecimal(3));

以下后台代码
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Runtime.CompilerServices;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class UserTop : System.Web.UI.UserControl
{
clsPub pubfun = new clsPub();
protected string nametm = "";
protected string username = "";
protected string usermail = "";

protected string namemny = "";

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetUserAcntInfo();
// lbl_lg_count.Text = "0 次";
}

}

protected void GetUserAcntInfo()
{
string s_lg_id = pubfun.GetRolesIDAsNameEx(Context);
SqlConnection sc = pubfun.GetConnEx();

try
{
using (SqlDataReader sdr1 = pubfun.GetDataReaderEx("select top 1 lg_in_tm from op_user where user_id=" + s_lg_id + " order by id desc", sc))


{
try
{
if (sdr1.Read())
{

nametm = sdr1.GetDateTime(0).ToString();
}
}
finally
{
sdr1.Close(); sdr1.Dispose();
}
}

using (SqlDataReader sdr = pubfun.GetDataReaderEx("select c_mny, c_reg_name, c_etprs_name from user_info where id=" + s_lg_id, sc))
{
try
{
if (sdr.Read())
{
userid = s_lg_id;
usermail = Convert.ToString(sdr.GetDecimal(1));
names = Convert.ToString(sdr.GetDecimal(2));
usermny = Convert.ToString(sdr.GetDecimal(3));
} }
finally
{

sdr.Close(); sdr.Dispose();
}
{
}


}
}
finally
{
sc.Close();
sc.Dispose();
}
}
}
.net object 数据库 string user
[解决办法]
调试看看sdr.GetDecimal取出来的什么值。如何使ToString异常的话,怀疑为null
[解决办法]


usermail = Convert.ToString(sdr["c_mny"]);
names = Convert.ToString(sdr["c_reg_name"]);
usermny = Convert.ToString(sdr["c_etprs_name"]);


改用这样的方式 试试呢
[解决办法]
sdr的字段中有null值中,导致由DBNull.Value GetDecimal(2)报错,用LS的方法就可以
或者直接用sdr["c_mny"].ToString() (为NULL是,得到的是空字符串)
[解决办法]
友情提示:decimal是十进数。

读书人网 >asp.net

热点推荐