将数据插入数据库中的问题 [英] problem in inserting data into database

查看:69
本文介绍了将数据插入数据库中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨.
我用以下代码编写了一条插入语句:

Hi.
I have written an insert statement with the below code:

protected void SubmitButton(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection();
    SqlTransaction trans = null;

    conn.ConnectionString = ConfigurationManager.ConnectionStrings["DBMarashi"].ConnectionString;
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    conn.Open();

    trans = cmd.Connection.BeginTransaction();
    try
    {
        cmd.CommandText = "INSERT INTO Persons (FirstName,LastName,FatherName,PersonelCode,SerialNumber,NationalNumber,BirthDate_S,PassportNumber,Nationality,Phone,Mobile,PostalCode,Email,HomeAddress) values(@FirstName,@LastName,@FatherName,@PersonelCode,@SerialNumber,@NationalNumber,@BirthDate_S,@PassportNumber,@Nationality,@Phone,@Mobile,@PostalCode,@Email,@HomeAddress)";
        cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = FirstNameTextBox.Text;
        cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = LastNameTextBox.Text;
        cmd.Parameters.Add("@FatherName", SqlDbType.NVarChar).Value = FatherNameTextBox.Text;
        cmd.Parameters.Add("@PersonelCode", SqlDbType.Int).Value = Convert.ToInt32(personelCodeTextBox.Text);
        cmd.Parameters.Add("@SerialNumber", SqlDbType.Int).Value = Convert.ToInt32(SerialNumTextBox.Text);
        cmd.Parameters.Add("@NationalNumber", SqlDbType.Int).Value = Convert.ToInt32(nationalNumTextBox.Text);
        cmd.Parameters.Add("@BirthDate_S", SqlDbType.Date).Value = Convert.ToDateTime(BirthDateTextBox.Text);
        cmd.Parameters.Add("@PassportNumber", SqlDbType.Int).Value = Convert.ToInt32(PassNumTextBox0.Text);
        cmd.Parameters.Add("@Nationality", SqlDbType.Int).Value = Convert.ToInt32(NationalityTextBox.Text);
        cmd.Parameters.Add("@Phone", SqlDbType.Int).Value = Convert.ToInt32(PhoneTextBox0.Text);
        cmd.Parameters.Add("@Mobile", SqlDbType.Int).Value = Convert.ToInt32(MobileTextBox1.Text);
        cmd.Parameters.Add("@PostalCode", SqlDbType.Int).Value = Convert.ToInt32(PostalCodeTextBox.Text);
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = (EmailTextBox1.Text);
        cmd.Parameters.Add("@HomeAddress", SqlDbType.NVarChar).Value = (AddressTextBox.Text);

        trans.Commit();
        cmd.ExecuteScalar();
    }
    catch (SqlException se)
    {
        try
        {
            trans.Rollback();
        }
        catch { Page.Title = "SqlException:" + se.Message; }

        try
        {
            trans.Rollback();
        }
        catch (Exception ex)
        {
            Page.Title = "Exception:" + ex.Message;
        }
    }
    finally
    {
        conn.Close();
    }
}



但是在调试和跟踪到达SerialNumber的代码(在DB中为Int)时,会发生此错误:

FormatException未被用户代码处理
输入字符串的格式不正确.



but in debugging and tracing the code when it reaches to SerialNumber(which is Int in DB)this error occures :

FormatException was unhandled by user code
Input string was not in a correct format.

推荐答案

您在这里遇到了一些问题.

1-为什么在不返回任何内容时调用executescalar? ExecuteNonQuery.

2-永远不要调用Convert.ToInt32.使用int.TryParse,如果您的文本不是数字,则不会引发异常,这显然不是't

3-切勿在您的表示层中放入这么多的数据库代码.放无.而是调用数据层.您的其余代码看起来很专业,但是在这里不是.
You have a few issues here.

1 - why call executescalar when you''re not returning anything ? ExecuteNonQuery.

2 - NEVER call Convert.ToInt32. Use int.TryParse, it will not throw an exception if your text is not a number, which apparently, it isn''t

3 - NEVER put this much DB code in to your presentation layer. Put NONE. Call a data layer instead. The rest of your code looks quite professional, but doing this here, is not.


这篇关于将数据插入数据库中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆