簡體   English   中英

嘗試將數據保存到數據庫時使用C#和ASP.NET進行異常處理

[英]Exception handling with C# & ASP.NET when trying to save data to database

只是試圖將用戶數據輸入從表單保存到數據庫中,但會不斷拋出異常。 我是編碼方面的新手,希望您能提供任何幫助。 這是我的代碼。

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;

 public partial class subscribe_Registration : System.Web.UI.Page
{

protected void Button1_Click(object sender, EventArgs e)
{
    Registration.Registration reg = new Registration.Registration();

    reg.Name = txtName.Text;
    reg.Age = Int32.Parse(txtAge.Text);
    reg.Sex = txtSex.Text;
    reg.Address = txtAddress.Text;
    reg.Email = txtEmail.Text;
    reg.Phone = Int32.Parse(txtPhone.Text);

    this.InsertRegistration(reg);
    phSuccess.Visible = true;
}

public void InsertRegistration(Registration.Registration reg)
{
    try
    {
        using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString)) 
        {
            using (var cmd = new SqlCommand("dbo.Procedure", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                var parameterName = new SqlParameter("@Name", SqlDbType.VarChar, 50);
                var parameterAge = new SqlParameter("@Age", SqlDbType.VarChar, 50);
                var parameterSex = new SqlParameter("@Sex", SqlDbType.VarChar, 50);
                var parameterAddress = new SqlParameter("@Address", SqlDbType.VarChar, 50);
                var parameterEmail = new SqlParameter("@Email", SqlDbType.VarChar, 100);
                var parameterPhone = new SqlParameter("@Phone", SqlDbType.VarChar, 100);

                cmd.Parameters.Add(parameterName);
                cmd.Parameters.Add(parameterAge);
                cmd.Parameters.Add(parameterSex);
                cmd.Parameters.Add(parameterAddress);
                cmd.Parameters.Add(parameterEmail);
                cmd.Parameters.Add(parameterPhone);

                cmd.Parameters.Add(parameterName);
                cmd.Parameters.Add(parameterAge);
                cmd.Parameters.Add(parameterSex);
                cmd.Parameters.Add(parameterAddress);
                cmd.Parameters.Add(parameterEmail);
                cmd.Parameters.Add(parameterPhone);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
}

我也上課

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

namespace Registration
{
public class Registration
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Sex { get; set; }
    public string Address { get; set; }
    public string Email { get; set; }
    public int Phone { get; set; }
}    
}

我的數據庫程序

CREATE PROCEDURE [dbo].[Procedure]
@Name VARCHAR(50),
@Age VARCHAR(50),
@Sex VARCHAR(50),
@Address VARCHAR(50),
@Email VARCHAR(100),
@Phone VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO Users(Name, Age, Sex, [Address], Email, Phone)
VALUES(@Name, @Age, @Sex, @Address, @Email, @Phone)
END
GO

每次我在表單字段中輸入數據時,都會出現一個例外

System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=App_Web_5rrjgvhs
StackTrace:
   at subscribe_Registration.InsertRegistration(Registration reg) in c:\Users\*mycomputer*\Documents\Visual Studio 2015\WebSites\WebSite1\subscribe\Registration.aspx.cs:line 68
   at subscribe_Registration.Button1_Click(Object sender, EventArgs e) in c:\Users\*mycomputer*\Documents\Visual Studio 2015\WebSites\WebSite1\subscribe\Registration.aspx.cs:line 25
   at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:

請注意,我在編程方面還很陌生,所以我還在學習。

我做錯什么了嗎? 有人可以解釋為什么會這樣嗎? 任何幫助將非常感激。

您沒有為參數提供值。 參見下面的代碼,定義參數后,在下一行中設置參數的.Value屬性。

public void InsertRegistration(Registration.Registration reg)
{
    try
    {
        using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString))
        {
            using (var cmd = new SqlCommand("dbo.Procedure", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                var parameterName = new SqlParameter("@Name", SqlDbType.VarChar, 50);
                parameterName.Value = reg.Name;
                var parameterAge = new SqlParameter("@Age", SqlDbType.VarChar, 50);
                parameterAge.Value = reg.Age;
                var parameterSex = new SqlParameter("@Sex", SqlDbType.VarChar, 50);
                parameterSex.Value = reg.Sex;
                var parameterAddress = new SqlParameter("@Address", SqlDbType.VarChar, 50);
                parameterAddress.Value = reg.Address;
                var parameterEmail = new SqlParameter("@Email", SqlDbType.VarChar, 100);
                parameterEmail.Value = reg.Email;
                var parameterPhone = new SqlParameter("@Phone", SqlDbType.VarChar, 100);
                parameterPhone.Value = reg.Phone;

                cmd.Parameters.Add(parameterName);
                cmd.Parameters.Add(parameterAge);
                cmd.Parameters.Add(parameterSex);
                cmd.Parameters.Add(parameterAddress);
                cmd.Parameters.Add(parameterEmail);
                cmd.Parameters.Add(parameterPhone);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

另外,您還要兩次添加參數。 我已經刪除了向命令添加參數的第二組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM