none
急呀,注册页面出错C# RRS feed

  • 问题

  • 我做了一个注册页面,当我测试那个注册页面时,点注册按钮时系统就出错,报错的是:“ int i = Convert.ToInt32(com.ExecuteNonQuery());”

    以下是我整个注册页面的代码,请各位牛人帮帮我!

    using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Web;
    
    using System.Web.UI;
    
    using System.Web.UI.WebControls;
    
    using System.Web.UI.HtmlControls;
    
    using System.Data.SqlClient;
    
    using System.Web.UI.WebControls.WebParts;
    
    using System.Web.Security;
    
    
    
    namespace TechIT.Manages.Member.Page_Interface
    
    {
    
     public partial class UP_login : System.Web.UI.Page
    
     {
    
      protected void Page_Load(object sender, EventArgs e)
    
      {
    
    
    
      }
    
    
    
      protected void ButtonisName_Click(object sender, EventArgs e)
    
      {
    
       int i = isName();
    
       if (i > 0)
    
       {
    
        RegisterStartupScript("yes", "<script>alert('会员名已经存在!')</script>"); 
    
       }
    
       else
    
       {
    
        RegisterStartupScript("no", "<script>alert('可以注册')</script>"); 
    
       }
    
      }
    
      protected int isName()
    
      {
    
       int i;
    
       string name = TextName.Text;
    
       if (name.Trim() != "")
    
       {
    
        SqlConnection con = createLoginConn();
    
        con.Open();
    
        SqlCommand com = new SqlCommand("select count(*) from loginInfo where Name='" + name + "'", con);
    
        return i = Convert.ToInt32(com.ExecuteScalar());
    
        con.Close();
    
       }
    
       else
    
        return i = 1;
    
      }
    
    
    
      protected void ButtonLogin_Click(object sender, EventArgs e)
    
      {
    
       int i = isName();
    
       if (i <= 0)
    
       {
    
        if (add())
    
        {
    
         SqlConnection con = this.createLoginConn();
    
         con.Open();
    
         SqlCommand com = new SqlCommand("insert LoginLog values('" + TextName.Text + "','" + DateTime.Now.ToString() + "')", con);
    
         com.ExecuteNonQuery();
    
         Response.Write("<script>alert('注册成功!单击确定返回登录页面');location='index.aspx';</script>");
    
        }
    
        else
    
        {
    
         Response.Write("<script>alert('注册失败!')</script>");
    
        }
    
       }
    
       else
    
       {
    
        Response.Write("<script>alert('会员名已经存在!')</script>");
    
       }
    
      }
    
    
    
      public bool add()
    
      {
    
       string name = TextName.Text;
    
       string pass = FormsAuthentication.HashPasswordForStoringInConfigFile(TextPass.Text, "MD5");
    
       string sex;
    
       if (RadioButtonMan.Checked)
    
       {
    
        sex = "男";
    
       }
    
       else
    
       {
    
        sex = "女";
    
       }
    
       string trueName = TextTrueName.Text;
    
       string phone = TextPhone.Text;
    
       string address = TextAddress.Text;
    
       string email = TextEmail.Text;
    
       string sql = "insert into loginInfo values('" + name + "','" + pass + "','" + sex + "','" + trueName + "','" + phone + "','" + email + "','" + address + "')";
    
       SqlConnection con = this.createLoginConn();
    
       con.Open();
    
       SqlCommand com = new SqlCommand(sql, con);
    
       int i = Convert.ToInt32(com.ExecuteNonQuery());
    
       if (i > 0)
    
       {
    
        return true;
    
       }
    
       else
    
       {
    
        return false;
    
       }
    
       con.Close();
    
      }
    
      protected SqlConnection createLoginConn()
    
      {
    
       SqlConnection con = new SqlConnection("server=192.168.1.100;database=TechIT
    • 已编辑 Code Worker 2011年2月15日 3:38 没有完善问题
    2011年2月15日 3:37

答案

  • 你好!

    打断点查看详细的错误信息,有可能是 SQL 语句有问题。com.ExecuteNonQuery 本来就是 int32 无须转换,另外建议使用参数的方式代替拼字符串的方式,如下:

    // 尽量不要使用拼接 SQL 的方式,应该改用参数的方式避免 SQL 注入
    //string sql = "insert into loginInfo values('" + name + "','" + pass + "','" + sex + "','" + trueName + "','" + phone + "','" + email + "','" + address + "')";
    string sql = "insert into loginInfo values(@name,@pass,@sex,@trueName,@phone,@email,@address)";
    
    try
    {
      using (SqlConnection con = this.createLoginConn())
      {
        SqlCommand com = new SqlCommand(sql, con);
        com.Parameters.AddWithValue("@name", name);
        com.Parameters.AddWithValue("@pass", pass);
        com.Parameters.AddWithValue("@sex", sex);
        com.Parameters.AddWithValue("@trueName", trueName);
        com.Parameters.AddWithValue("@phone", phone);
        com.Parameters.AddWithValue("@email", email);
        com.Parameters.AddWithValue("@address", address);
    
        con.Open();
        com.ExecuteNonQuery();
    
        return true;
      }
    }
    catch(Exception e)
    {
      // 记录错误信息
      return false;
    }
    


    知识改变命运,奋斗成就人生!
    2011年2月15日 5:47
    版主

全部回复

  • 你好!

    打断点查看详细的错误信息,有可能是 SQL 语句有问题。com.ExecuteNonQuery 本来就是 int32 无须转换,另外建议使用参数的方式代替拼字符串的方式,如下:

    // 尽量不要使用拼接 SQL 的方式,应该改用参数的方式避免 SQL 注入
    //string sql = "insert into loginInfo values('" + name + "','" + pass + "','" + sex + "','" + trueName + "','" + phone + "','" + email + "','" + address + "')";
    string sql = "insert into loginInfo values(@name,@pass,@sex,@trueName,@phone,@email,@address)";
    
    try
    {
      using (SqlConnection con = this.createLoginConn())
      {
        SqlCommand com = new SqlCommand(sql, con);
        com.Parameters.AddWithValue("@name", name);
        com.Parameters.AddWithValue("@pass", pass);
        com.Parameters.AddWithValue("@sex", sex);
        com.Parameters.AddWithValue("@trueName", trueName);
        com.Parameters.AddWithValue("@phone", phone);
        com.Parameters.AddWithValue("@email", email);
        com.Parameters.AddWithValue("@address", address);
    
        con.Open();
        com.ExecuteNonQuery();
    
        return true;
      }
    }
    catch(Exception e)
    {
      // 记录错误信息
      return false;
    }
    


    知识改变命运,奋斗成就人生!
    2011年2月15日 5:47
    版主
  • 好的,我试试看!
    2011年2月15日 6:41
  • 你好,

    大致看了你的代码,除了之前肖小勇提出的问题以外,暂时没有发现什么其他的问题,所以非常建议设置断点来进行代码的调试。现在我想知道你是否已经解决了问题?如果问题已经解决,希望你可以把对你有帮助的回复标记为答复,这样也可以帮助其他和你遇到类似问题的朋友;如果问题还没有解决,欢迎继续在论坛里提问,我们将很乐意帮助你。

    谢谢你的理解和支持。

    Mio


    Mio Miao[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年2月18日 3:39
    版主