Ошибка SQL Server: ExecuteNonQuery: свойство Connection не инициализировано

Я пытаюсь разработать образец страницы регистрации, используя ASP.Net и С#. Я вызываю хранимую процедуру для вставки данных в базу данных. Моя база данных SQL Server 2008.

Это мой код:

public partial class Sample : System.Web.UI.Page
{
   SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ToString());
   string str;

protected void Page_Load(object sender, EventArgs e)
{
    rbt_Male.Checked = true;
}

protected void btn_Submit_Click(object sender, EventArgs e)
{
    string @Name = txtbx_Name.Text;
    string @Gender_male = rbt_Male.Text;
    string @Gender_Female = rbt_Female.Text;
    string @Email = txtbx_Email.Text;
    DateTime @Dob = Convert.ToDateTime(txt_Dob.Text);
    submitdata();
}

protected void submitdata()
{
    try
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Parameters.Clear();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "insertdata";

        if (rbt_Male.Checked)
        {
            cmd.Parameters.AddWithValue("@Name", txtbx_Name.Text);
            cmd.Parameters.AddWithValue("@Gender_Male", rbt_Male.Text);
            cmd.Parameters.AddWithValue("@Email", txtbx_Email.Text);
            cmd.Parameters.AddWithValue("@Dob", Convert.ToDateTime(txt_Dob.Text));
        }
        else if (rbt_Female.Checked)
        {
            cmd.Parameters.AddWithValue("@Name", txtbx_Name.Text);
            cmd.Parameters.AddWithValue("@Gender_Female", rbt_Male.Text);
            cmd.Parameters.AddWithValue("@Email", txtbx_Email.Text);
            cmd.Parameters.AddWithValue("@Dob", Convert.ToDateTime(txt_Dob.Text));
        }

        if (con.State == ConnectionState.Closed)
            con.Open();

        cmd.ExecuteNonQuery();

        lbl_Errormsg.Visible = true;
        lbl_Errormsg.Text = "Record Inserted Successfully";
        con.Close();
    }
    catch (Exception ex)
    {
        lbl_Errormsg.Visible = true;
        lbl_Errormsg.Text = ex.Message;
    }

Я получаю сообщение об ошибке

ExecuteNonQuery: свойство Connection не инициализировано.

Я получаю эту ошибку в cmd.ExecuteNonQuery();

Пожалуйста помогите.

Моя хранимая процедура

ALTER Procedure insertdata
(
 @Name Varchar(20),
 @Gender Varchar(6),
 @Email Varchar(20),
 @Dob date
) 
As
 Begin
   Insert into samplelogintable (Name, Gender, Email, Dob)
   Values(@Name, @Gender, @Email, @Dob)
 End

person Pritam    schedule 31.01.2013    source источник


Ответы (1)


Вы не связали свою команду cmd с вашим SqlConnection, поэтому вы получаете сообщение об ошибке.

Вам необходимо указать:

cmd.Connection = con;

в вашем методе submitdata().

Поскольку SqlCommand реализует IDisposable, лучше использовать его в рамках блокировать как:

using (SqlCommand cmd = new SqlCommand())
{

    cmd.Parameters.Clear();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "insertdata";
    cmd.Connection = con;
    .... your code

}
person Habib    schedule 31.01.2013
comment
Просто для подтверждения я должен написать код от if (rbt_Male.Checked) до конца блока try, я прав? - person Pritam; 31.01.2013
comment
@Pritam, вы можете связать соединение с командой до ее выполнения, вы даже можете указать соединение в конструкторе для команды вместе с текстом команды. Но только не забудьте связать соединение с командой перед ее выполнением. - person Habib; 31.01.2013
comment
Спасибо, чувак, теперь я понял ошибку, и теперь она работает нормально. Большое спасибо :) - person Pritam; 31.01.2013
comment
Спасибо. На самом деле я новичок в stackoverflow. Спасибо за ваше предложение. Я буду иметь это в виду в будущем. - person Pritam; 31.01.2013
comment
Теперь у меня есть некоторые сомнения, если вы свободны, не могли бы вы сообщить мне об этом? На самом деле у меня возникла проблема с вставкой некоторых данных в базу данных через хранимую процедуру. Заранее спасибо. - person Pritam; 01.02.2013
comment
@Pritam, я бы посоветовал вам опубликовать новый вопрос со всеми возможными подробностями, включая код С#, который вы используете, и ваш вызов SP, и ваш SP, если возможно, или небольшой пример с вашей проблемой. Это позволит другим пользователям SO помочь вам лучше. - person Habib; 01.02.2013
comment
Спасибо. Я публикую это сейчас. - person Pritam; 01.02.2013