//代码
BLL.User user = new edu.BLL.User();
int userId = user.SignIn(LoginName.Text,Password.Text);if(userId == 0)
{
message.Text = "用户名或密码错误!";
}
else
{
Response.Redirect("../edu/student/s_index.aspx");
}//调入登录的BLL类SignIn
public int SignIn(string userName, string userPwd)
{
SqlParameter[] signInPara = {
new SqlParameter("@userName", userName), new SqlParameter("@userPwd", userPwd) }; return Convert.ToInt32(DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
CommandType.StoredProcedure, "SignIn", signInPara));
}//数据库检索类ExecuteScalar
public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) 
{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}//存储过程
CREATE PROCEDURE SignIn
(
@userName char(15),
@userPwd char(9)
)
AS
SELECT  ksbh
FROM test1
WHERE ksbh=@userName 
 AND bmh=@userPwd
GO
//错误语句
值对于 Int32 太大或太小。
数据库中ksbh字段是char15,也许太长了,换别的char4的字段数据读出就没有问题,
请问如何修改这句return Convert.ToInt32,或者是别的方法

解决方案 »

  1.   

    你这个字符串里的数字能够放入32字节的Int32的么?否则的话,试一下 long or Int64Convert.ToInt64
      

  2.   

    对象直接强制转换:return Convert.ToInt32((DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
    CommandType.StoredProcedure, "SignIn", signInPara)).Tostring());看看行不行····
      

  3.   

    改为return Convert.ToInt32(DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
    CommandType.StoredProcedure, "SignIn", signInPara)).Tostring();
    //显示错误 
    “int”并不包含对“Tostring”的定义改为Convert.ToInt64
    //显示错误
    “long”并不包含对“Tostring”的定义
      

  4.   

    上面改为Convert.ToInt64的错误显示贴错了,应该是
    //显示错误
    无法将类型“long”隐式转换为“int”
      

  5.   

    public Int64 SignIn(string userName, string userPwd)
    {
    SqlParameter[] signInPara = {
    new SqlParameter("@userName", userName), new SqlParameter("@userPwd", userPwd) }; return Convert.ToInt64(DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, CommandType.StoredProcedure, "SignIn", signInPara));
    }
      

  6.   

    改为 return Convert.ToInt32(DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
    CommandType.StoredProcedure, "SignIn", signInPara).Tostring());  你把格式()搞错位置了, 把着代码复制过去看看    按我的理解不会有问题的这个是把对象object 转换成string, 再强制转换成 INT 型,怎么会错呢? ~~~~
      

  7.   

    改为public Int64 SignIn(string userName, string userPwd)
    //显示错误
    找不到类型或命名空间名称“int64”(是否缺少 using 指令或程序集引用?)改为return Convert.ToInt32(DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
    CommandType.StoredProcedure, "SignIn", signInPara).Tostring());
    //显示错误
    “object”并不包含对“Tostring”的定义
      

  8.   

    come on, add a using System;also on the calling side, make sure the receiving variable is declared as Int64
      

  9.   

    思归的方法应该可以啊????
    要不 你这样看看具体错误是出在哪里的!~~~
    ExecuteScalar方法是返回一个对象,那我们先实例化这个对象!!!object obj = DAL.SQLHelper.ExecuteScalar(DAL.SQLHelper.CONN_STRING, 
    CommandType.StoredProcedure, "SignIn", signInPara);return Convert.Toint32(obj.ToString());
      

  10.   

    问题已经解决,谢谢你们的热心解答,分不多都散了。其实思归的方法是对的,不过似乎表达上我不容易理解而已,应该是将Convert.ToInt32改为Convert.ToInt64,所有相关Int定义改为Long就可以了。