我是ADO.net的新手。我有学生表,ID,姓名和地址为列。 ID是主键并设置为自动增量。我写了下面的存储过程
Create PROCEDURE [dbo].[InsertStudent]
@_Name nvarchar(15),
@_address nvarchar(45)
AS
INSERT INTO Student (Name, Address) VALUES(@_Name, @_address);
Go.
为了运行这个存储过程,我写了下面的方法
private static void RunStoredProcedure()
{
using (SqlConnection connection = new SqlConnection("data source=server_name;initial catalog=TestDB;trusted_connection=true"))
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Student", connection);
adapter.InsertCommand = new SqlCommand("InsertStudent", connection);
adapter.InsertCommand.CommandType = CommandType.StoredProcedure;
adapter.InsertCommand.Parameters.Add("@_Name", SqlDbType.NChar, 15, "Name").Value = "John";
adapter.InsertCommand.Parameters.Add("@_address", SqlDbType.NChar, 45, "Address").Value = "Paris";
DataTable students = new DataTable();
adapter.Fill(students);
adapter.Update(students);
}
}
不幸的是,在运行此方法后没有插入行。 如果我使用ExcecuteNonQuery()运行类似的代码,它工作正常。请帮我解决这个问题,因为我只想使用DataAdapter的Update()方法。
答案 0 :(得分:0)
而不是:
adapter.InsertCommand.Parameters.Add("@_Name", SqlDbType.NChar, 15, "Name").Value = "John";
adapter.InsertCommand.Parameters.Add("@_address", SqlDbType.NChar, 45, "Address").Value = "Paris";
在调用SqlDataAdapter的Update函数之前,您必须向DataTable添加新行:
using (SqlConnection connection = new SqlConnection(@"Data Source=LAPTOP\SQLEXPRESS;initial catalog=SO;trusted_connection=true"))
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Student", connection);
adapter.InsertCommand = new SqlCommand("InsertStudent", connection);
adapter.InsertCommand.CommandType = CommandType.StoredProcedure;
adapter.InsertCommand.Parameters.Add("@_Name", SqlDbType.NChar, 15, "Name");
adapter.InsertCommand.Parameters.Add("@_address", SqlDbType.NChar, 45, "Address");
DataTable students = new DataTable();
adapter.Fill(students);
// Add a new row.
DataRow sRow = students.NewRow();
sRow["Name"] = "John";
sRow["Address"] = "Paris";
students.Rows.Add(sRow);
adapter.Update(students);
}
请查看here,了解您要尝试做的工作示例。
调用Update方法后,SQL数据适配器对象执行SQL INSERT,UPDATE和DELETE命令(由InsertCommand,UpdateCommand和DeleteCommand属性指定),以持久化DataTable对数据库的更改。
因此,如果已将新行添加到DataTable,则会执行相应的SQL INSERT命令。在这种情况下,insert命令是一个sproc。所有DataTable字段都映射到相应的sproc参数,然后执行sproc。最终在数据库表中添加了一个新行。