sql和C#之间的连接错误

时间:2011-12-26 14:38:50

标签: c# sql-server ado.net

我在我的sql server上创建了该表:

create table Empolyee(
ESSN int not null,
EFirstName varchar(20) not null ,
ELastName varchar(20) not null,
EJob varchar(20),
EBDate date,
ESalary int,

primary key(ESSN));

并且在C#中我尝试使用该代码将数据添加到数据库:

SqlConnection sqc = new SqlConnection("Data Source=.\\;Initial Catalog=DB;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();

        da.SelectCommand = new SqlCommand("INSERT INTO Empolyee VALUES (@ESSN,@EFirstName,@ELastName,@EJob,@EBDate,@ESalary)", sqc);
        da.SelectCommand.Parameters.Add("@ESSN", SqlDbType.Int).Value = textBox1.Text;
        da.SelectCommand.Parameters.Add("@EFirstName", SqlDbType.VarChar).Value = textBox2.Text;
        da.SelectCommand.Parameters.Add("@ELastName", SqlDbType.VarChar).Value = textBox3.Text;
        da.SelectCommand.Parameters.Add("@EJob", SqlDbType.VarChar).Value = textBox4.Text;
        da.SelectCommand.Parameters.Add("@EBDate", SqlDbType.Date).Value = maskedTextBox1.Text;
        da.SelectCommand.Parameters.Add("@ESalary", SqlDbType.Int).Value = textBox5.Text;

        // open connection
        sqc.Open();
        // excute the command
        da.InsertCommand.ExecuteNonQuery();
        // close connection
        sqc.Close();

运行时出现错误:对象引用未设置为对象实例或System.NullReferenceException:对象引用未设置为对象实例。

2 个答案:

答案 0 :(得分:2)

您尚未向da.InsertCommand分配任何内容 - 而是将INSERT命令放入da.SelectCommand ...只需将所有引用从da.SelectCommand更改为{{1}您在问题中显示的代码:

da.InsertCommand

顺便说一句,您不需要任何 da.InsertCommand = new SqlCommand("INSERT INTO Empolyee VALUES (@ESSN,@EFirstName,@ELastName,@EJob,@EBDate,@ESalary)", sqc); da.InsertCommand.Parameters.Add("@ESSN", SqlDbType.Int).Value = textBox1.Text; da.InsertCommand.Parameters.Add("@EFirstName", SqlDbType.VarChar).Value = textBox2.Text; da.InsertCommand.Parameters.Add("@ELastName", SqlDbType.VarChar).Value = textBox3.Text; da.InsertCommand.Parameters.Add("@EJob", SqlDbType.VarChar).Value = textBox4.Text; da.InsertCommand.Parameters.Add("@EBDate", SqlDbType.Date).Value = maskedTextBox1.Text; da.InsertCommand.Parameters.Add("@ESalary", SqlDbType.Int).Value = textBox5.Text; SqlDataAdapter来执行DataSet - 只能通过INSERTSqlConnection来完成。

答案 1 :(得分:2)

您正在执行以下行:

  da.InsertCommand.ExecuteNonQuery()

但你是init SelectCommand

尝试替换以下代码:

da.InsertCommand= new SqlCommand("INSERT INTO Empolyee VALUES (@ESSN,@EFirstName,@ELastName,@EJob,@EBDate,@ESalary)", sqc);
        da.InsertCommand.Parameters.Add("@ESSN", SqlDbType.Int).Value = textBox1.Text;
        da.InsertCommand.Parameters.Add("@EFirstName", SqlDbType.VarChar).Value = textBox2.Text;
        da.InsertCommand.Parameters.Add("@ELastName", SqlDbType.VarChar).Value = textBox3.Text;
        da.InsertCommand.Parameters.Add("@EJob", SqlDbType.VarChar).Value = textBox4.Text;
        da.InsertCommand.Parameters.Add("@EBDate", SqlDbType.Date).Value = maskedTextBox1.Text;
        da.InsertCommand.Parameters.Add("@ESalary", SqlDbType.Int).Value = textBox5.Text;