插入SQL DB不起作用

时间:2017-11-15 17:28:02

标签: c# asp.net sql-server-2012

 SqlCommand cmd = new SqlCommand();
        SqlConnection con = new SqlConnection();
        string checkRadioButton()
        {
            string rbdText;
            if(RadioButton1.Checked)
            {
                rbdText = RadioButton1.Text;
            }
            else
            {
                rbdText = RadioButton2.Text;
            }
            return rbdText;
        }



        protected void Button1_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand(" insert into Registration values(@Name, @Gender, @MobileNumber, @EmailID, @UserID, @Password, @Address, @Country)", con);
            cmd.Parameters.AddWithValue("@Name", TextBox1.Text);
            cmd.Parameters.AddWithValue("@Gender", checkRadioButton());
            cmd.Parameters.AddWithValue("@MobileNumber", TextBox2.Text);
            cmd.Parameters.AddWithValue("@EmailID", TextBox3.Text);
            cmd.Parameters.AddWithValue("@UserID", TextBox5.Text);
            cmd.Parameters.AddWithValue("@Password", TextBox6.Text);
            cmd.Parameters.AddWithValue("@Address", TextBox8.Text);
            cmd.Parameters.AddWithValue("@Country", DropDownList1.SelectedItem.Value);
            cmd.ExecuteNonQuery();
            con.Close();
            Response.Redirect("Homepage2.aspx");

        }

这是我的注册页面的aspx.cs文件。没有编译错误,但在执行Button1_Click事件后,注册数据不会保存到数据库中。

2 个答案:

答案 0 :(得分:1)

您需要在SQLConnection构造函数中添加连接字符串。 connection string本身通常会保留在web.config中。所以代码可能类似于:

var connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Do your insert here;
}

答案 1 :(得分:0)

正如其他人所提到的,您的问题的答案是您缺少连接字符串作为SqlConnection对象实例化的参数:

SqlConnection con = new SqlConnection("connection string goes here");

但是,我还建议您修改一些代码。

正确释放非托管资源

任何实现IDisposable接口的类都需要正确处理。这意味着调用Dispose()方法,或者将对象的实例化包装在using块中(如果可能的话,我会强烈推荐这条路径,因为它更简单)。

因此,例如SqlConnection实现了IDisposable,所以我会改变这个:

SqlConnection con = new SqlConnection(); 

到此:

using (SqlConnection con = new SqlConnection())
{
    // ...
}

您还需要对SqlCommand进行这些更改。

try...catch块用于可能引发异常的代码

任何可能抛出异常的代码都应该包含在try...catch块中。这样做可以防止您的应用程序在抛出异常时崩溃。可以在您不希望与代码无关的地方抛出异常。

SqlConnection为例。如果您的网络连接突然停止工作并且您的代码调用SqlConnection.Open(),则会引发异常并且您的应用程序将崩溃。在try...catch块中包含此行将阻止应用程序崩溃并允许您“正常”处理异常(通过记录错误并在可能的情况下继续运行应用程序)。

using (var connection = new SqlConnection("Server=SQLServerName;Integrated Security=True;"))
{
    try
    {
        connection.Open()
    }
    catch (Exception ex)
    {
        // Do something with the exception
    }
}

将硬编码的SQL语句移动到存储过程/函数

如果将SQL语句直接放在源代码中(通常称为“硬编码”),则必须重新编译并重新部署整个应用程序(如果该SQL语句将来必须更改)。

相反,您可以将SQL语句提取到存储过程或函数中,并从您的代码中调用它们。这样,当SQL语句需要更改时,您不需要重新编译和重新部署应用程序;只需更新存储过程/函数。

您的代码中还有一些部分可以重构为更简单,但这篇帖子已经远远超过我最初的预期,所以我会在这里停下来。